我想避免在我的Java代码中重复数据,但结果xml必须有这样的重复。
是否可以使用这样的Java代码
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Parent {
@XmlElementWrapper(name = "children")
@XmlElement(name = "child")
List<Child> children;
@XmlPath("children/*/surname/text()") //dosn't work
String surname;
}
public class Child {
String name;
}
获取
<parent>
<children>
<child>
<name>Bob</name>
<surname>FromParent</surname>
</child>
<child>
<name>Sara</name>
<surname>FromParent</surname>
</child>
</children>
</parent>
答案 0 :(得分:0)
您正在使用(不推荐使用的)JAXB中的一些注释,因此我想您一直在询问Java / XML绑定。我不确定@XmlPath
应该是什么,怎么样 - 我猜你刚刚做到了。
在任何情况下,在XML绑定中,每个类映射到一个元素类型,并将其每个字段映射到该元素类型的属性或子元素。您无法映射到更深层嵌套的节点,尤其是您无法映射到非唯一节点。
所以不,你问的是不支持的,也不是真的有意义。考虑一下:如果Java试图反序列化<parent>
个<surname>
个不同的孩子,应该会发生什么?如果<surname>
完全属于<parent>
的属性,就像在您的类中一样,那么它就属于XML中的属性。如果它是每个<child>
的属性,就像在XML中一样,那么它应该对应于类Child
的属性。
可能它应该是每个人的独立财产:作为一个现实世界的例子,我母亲的姓氏与我不同,如果我的女儿结婚,那么她可能会采取与我不同的姓氏。类似的情况可能适用于非结构性家庭的类似情况。