【问题标题】:XML Mapping to Java ObjectXML 映射到 Java 对象
【发布时间】:2018-01-07 21:15:37
【问题描述】:

我有一个这样的 Xml

<entry>
  <comboBox>
    <name>xxx</name>
    <details>sdfd</details>
  </comboBox>
</entry>

在另一个条目中,我有这样的 XML

<entry>
  <numberField>
    <name>xxx</name>
    <details>sdfd</details>
  </numberField>
</entry>

我想将 comboBoxnumberField 都映射到 Java 中名为 Field 的同一个类

如何在 Entry Class 中注释 Java 字段?

【问题讨论】:

  • 在编辑您的问题时,我注意到您的 XML 无效,因为您有一个名为 comboBox 的开始标签,但您的结束标签名为 combobox

标签: java xml jaxb


【解决方案1】:

在您的 Entry 类中,您需要使用注释 Java 字段 @XmlElements 并在那里列出各个元素的名称。像这样:

@XmlAccessorType(XmlAccessType.FIELD)
public class Entry {

    @XmlElements({
        @XmlElement(name = "comboBox", type = Field.class),
        @XmlElement(name = "numberField", type = Field.class)
    })
    private Field field;
}

为了清楚起见,我在上面的注释中添加了type = Field.class。 在您的情况下,您可以省略它。然后 JAXB 会从属性类型 decaration 中提取Field,具有相同的预期效果。

Field 类可以像这样直截了当:

@XmlAccessorType(XmlAccessType.FIELD)
public class Field {

    @XmlElement
    private String name;

    @XmlElement
    private String details;
}

【讨论】:

  • 谢谢,我之前试过这个,但之前没有用,因为我忽略了一个 xmlElements,比如 comboBox 等,但是在你回答之后,我再次尝试,发现我犯了错误,我会接受回答,再次感谢
【解决方案2】:

我认为您应该为具有公共注释字段的对象创建两个子类。 每个子类只需要定义 jaxb @XmlRootElement(数字字段或组合框)

【讨论】:

  • 我没听明白你能用一些示例代码发布吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多