【问题标题】:Add field from parent to every child node将字段从父节点添加到每个子节点
【发布时间】:2017-10-31 16:48:31
【问题描述】:

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

【问题讨论】:

    标签: java xml xpath jaxb


    【解决方案1】:

    您正在使用来自(已弃用)JAXB 的一些注释,所以我猜您是在询问 Java / XML 绑定。我不确定@XmlPath 应该是什么,但是——我猜你只是编造的。

    在任何情况下,在 XML 绑定中,每个类都映射到一个元素类型,并且它的每个字段都映射到该元素类型的一个属性或子元素。不能映射到嵌套更深的节点,尤其不能映射到非唯一节点。

    所以不,您的要求不受支持,也没有多大意义。考虑一下:如果 Java 尝试反序列化具有不同 &lt;surname&gt;s 的子代的 &lt;parent&gt; 会发生什么?如果&lt;surname&gt; 是&lt;parent&gt; 的专有属性,就像在您的类中一样,那么这就是它在XML 中的所属位置。如果它是每个&lt;child&gt; 的属性,就像在您的XML 中一样,那么它应该对应于Child 类的属性。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      相关资源
      最近更新 更多