从父级向每个子节点添加字段

时间:2017-10-31 16:48:31

标签: java xml xpath jaxb

我想避免在我的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>

1 个答案:

答案 0 :(得分:0)

您正在使用(不推荐使用的)JAXB中的一些注释,因此我想您一直在询问Java / XML绑定。我不确定@XmlPath应该是什么,怎么样 - 我猜你刚刚做到了。

在任何情况下,在XML绑定中,每个类映射到一个元素类型,并将其每个字段映射到该元素类型的属性或子元素。您无法映射到更深层嵌套的节点,尤其是您无法映射到非唯一节点。

所以不,你问的是不支持的,也不是真的有意义。考虑一下:如果Java试图反序列化<parent><surname>个不同的孩子,应该会发生什么?如果<surname>完全属于<parent>的属性,就像在您的类中一样,那么它就属于XML中的属性。如果它是每个<child>的属性,就像在XML中一样,那么它应该对应于类Child的属性。

可能它应该是每个人的独立财产:作为一个现实世界的例子,我母亲的姓氏与我不同,如果我的女儿结婚,那么她可能会采取与我不同的姓氏。类似的情况可能适用于非结构性家庭的类似情况。