【发布时间】:2016-05-17 11:26:18
【问题描述】:
我已经四处寻找和搜索,但找不到我的问题的答案。我有一个具有以下结构的 XML 文件:
<!DOCTYPE persons [
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT residence (#PCDATA)>
<!ELEMENT children (person*)>
<!ELEMENT person (firstname, (lastname?), (children?), (residence?))>
<!ELEMENT persons (person+)>
<!ATTLIST person id ID #REQUIRED>
<!ATTLIST person friends IDREFS #IMPLIED>
<!ATTLIST persons file CDATA #IMPLIED>
]>
<persons file="this">
<person id="p-1">
<firstname>Homer</firstname>
<lastname>Simpson</lastname>
<residence>Springfield</residence>
<children>
<person id="p-3">
<firstname>Bart</firstname>
<residence>Springfield</residence>
</person>
</children>
</person>
<person id="p-2" friends="p-1">
<firstname>Ned</firstname>
<lastname>Flanders</lastname>
<residence>Springfield</residence>
</person>
</persons>
我的 Java 文件如下:
Persons.java
@XmlRootElement(name="persons")
public class Persons {
@XmlAttribute(name="file")
private String file;
@XmlElement(name="person")
private List<Person> persons;
/* setters and getters */
}
Person.java
public class Person {
@XmlAttribute(name="id")
private String id;
@XmlAttribute(name="friends")
private String friends;
private String firstname;
private String lastname;
private String residence;
private List<Children> children;
/* getters and setters */
}
Children.java
public class Children {
private List<Person> persons;
/* getters and setters */
}
注意:我在对象变量上使用了注释,因为我不想写下 getter 和 setter。我知道,否则@XmlAccessorType(XmlAccessType.FIELD) 是必要的。
所以<children> 实际上可以拥有一个或多个<person> 作为孩子。
我想我对不同的列表感到困惑。
当我通过对每个人使用简单的System.out.println() 命令解组给定的 XML 文件来简单地测试它时,我看到每个元素和属性都具有正确的值,但 person.getChildren() 总是返回 null。我做错了什么?
【问题讨论】:
-
我正在努力解决同样的问题。真的有必要为每个嵌套元素创建一个类吗?有没有办法导航到子元素?
标签: java xml jaxb unmarshalling