要解码的示例 xml 文件
<category>
<id>abcat0010000</id>
<name>Gift Center</name>
<path>
<category>
<id>cat00000</id>
<name>Best Buy</name>
</category>
<category>
<id>abcat0010000</id>
<name>Gift Center</name>
</category>
</path>
<subCategories>
<category>
<id>pcmcat140000050035</id>
<name>Capturing Photos & Videos</name>
</category>
<category>
<id>pcmcat140000050036</id>
<name>Listening to Digital Music</name>
</category>
<category>
<id>pcmcat140000050037</id>
<name>Computing Made Easy</name>
</category>
<category>
<id>pcmcat140000050039</id>
<name>Simple GPS Navigation</name>
</category>
<category>
<id>pcmcat140000050040</id>
<name>Playing Video Games</name>
</category>
<category>
<id>pcmcat140000050041</id>
<name>Watching HDTV</name>
</category>
<category>
<id>pcmcat140000050042</id>
<name>Enjoying Favorite Movies</name>
</category>
<category>
<id>abcat0012000</id>
<name>Him</name>
</category>
<category>
<id>abcat0013000</id>
<name>Teens</name>
</category>
<category>
<id>abcat0014000</id>
<name>Kids</name>
</category>
</subCategories>
</category>
我的java对象
@XmlRootElement(name="category")
public class Category {
String id;
String name;
public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
}
两种类型“类别”之间的关系不太令人困惑
@XmlRootElement("category")
public class ExtendedCategory extends Category {
/*String id;
String name;*/
List<Category> path;
List<Category> subCategories;
/*public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
*/
public List<Category> getPath() {
return path;
}
@XmlElementWrapper(name="path")
@XmlElement(name="category", type=Category.class)
public void setPath(List<Category> path) {
this.path = path;
}
public List<Category> getSubCategories() {
return subCategories;
}
@XmlElementWrapper(name="subCategories")
@XmlElement(name="category", type=Category.class)
public void setSubCategories(List<Category> subCategories) {
this.subCategories = subCategories;
}
}
我收到异常,类别无法转换为扩展类别 如果我将顶级 xml 元素更改为其他内容(+扩展类别中的相应更改),则一切正常
如何解码多个元素具有相同名称的对象?
最佳答案
@XmlRootElement(name = "category")
public class Category {
String id;
String name;
List<Category> path;
List<Category> subCategories;
public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public List<Category> getPath() {
return path;
}
@XmlElementWrapper(name = "path")
@XmlElement(name = "category", type = Category.class)
public void setPath(List<Category> path) {
this.path = path;
}
public List<Category> getSubCategories() {
return subCategories;
}
@XmlElementWrapper(name = "subCategories")
@XmlElement(name = "category", type = Category.class)
public void setSubCategories(List<Category> subCategories) {
this.subCategories = subCategories;
}
}
我正在努力
Category c = JAXB.unmarshal(new File("yourXml"), Category.class);
我得到了包含 2 个路径和 10 个子类别的类别,如您所需要。
下一页:
JAXB.marshal(c, System.out);
我得到了与您的示例相同的 XML。
这个类效果很好。对于子类别,将字段 path
设置为 null
,将字段 subCategories
设置为 null
关于java - 解码多个元素的同名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12333412/