【问题标题】:Changeable XML structure in JAXB?JAXB 中的可变 XML 结构?
【发布时间】:2016-05-20 19:48:33
【问题描述】:

我正在考虑创建 XML 文件的 Java 生成器,然后由另一个 Java 程序加载(我不能在那里更改代码)。显而易见的答案是 JAXB,但是我偶然发现了一个问题。

我希望 XML 更加可定制:

<HeadTag>
  <firsElement>
    <att1/>
    <att2/>
    <att3/>
  </firsElement>
  <secondElement>
    <att3/>
    <att4/>
    <att5/>
    <att6/>
  </secondElement>
</HeadTag>
<HeadTag>
  <firsElement>
    <att1/>
    <att2/>
    <att3/>
  </firsElement>
</HeadTag>
<HeadTag>
  <secondElement>
    <att3/>
    <att4/>
    <att5/>
    <att6/>
  </secondElement>
</HeadTag>

所有三个 XML 都是生成器的有效输出。我已经为 fistElement、secondElement 等创建了 Java 类(其中有很多),但我不知道如何将它们全部添加到一个 HeadTag 元素下。

我有很多元素,超过 500 个,所以将它们作为一个字段放在课堂上有点难看。

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    如果你能负担得起你的元素类来扩展一个抽象类,你可以试试这个:

    @XmlAccessorType(XmlAccessType.FIELD)
    public abstract class Element{};
    
    @XmlAccessorType(XmlAccessType.FIELD)
    public class FirstElement extends Element{ ... };
    
    @XmlAccessorType(XmlAccessType.FIELD)
    public class SecondElement extends Element{ ... };
    
    //Other elements classes
    
    @XmlRootEntity
    @XmlAccessorType(XmlAccessType.FIELD)
    public class HeadTag{
        @XmlElements({
            @XmlElement(name="firstElement",type=FirstElement.class),
            @XmlElement(name="secondElement",type=SecondElement.class),
            //One for each of your classes
        })
        private List<Element> elements;
    }
    

    你仍然会有很多 @XmlElement 注释,但你的类中不会有 500 多个字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多