java - JAXB @XmlElements 命令

标签 java xml jaxb jaxb2

@XmlElements({
     @XmlElement(name = "house", type = House.class),
     @XmlElement(name = "error", type = Error.class),
     @XmlElement(name = "message", type = Message.class),
     @XmlElement(name = "animal", type = Animal.class)     
 })
protected List<RootObject> root;

其中 RootObject 是 House、Error、Message、Animal 的父类(super class)

root.add(new Animal());
root.add(new Message());
root.add(new Animal());
root.add(new House());
//Prints to xml
<animal/>
<message/>
<animal/>
<house/>

但需要按照 @XmlElements({}) 中声明的顺序

<house/>
<message/>
<animal/>
<animal/>

最佳答案

@XmlElements 的用途

@XmlElements对应XML Schema中的choice结构。一个属性对应于多个元素(参见:http://blog.bdoughan.com/2010/10/jaxb-and-xsd-choice-xmlelements.html)

取货单

JAXB 实现将遵守项目添加到 List 的顺序。这与您看到的行为相符。

获得想要的订单

  1. 您可以按照希望在 XML 文档中显示的顺序将项目添加到 List
  2. 您可以拥有与每个元素相对应的单独属性,然后使用 @XmlType 上的 propOrder 对输出进行排序(参见:http://blog.bdoughan.com/2012/02/jaxbs-xmltype-and-proporder.html)
  3. 对 JAXB beforeMarshal 事件的 List 属性进行排序。

关于java - JAXB @XmlElements 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782283/

相关文章:

java - 如何仅将 XMLGregorianCalendar 与日期部分(日、月、年)进行比较?

java - GlassFish 4 无法部署

java - 避免 if(condition) 返回 true 的首选方法

android - Android 应用程序中的日历以选择月份和年份

java - 从 MODS 模式生成的 JAXB 无法获取元素的值

java - 尝试使用 akka 流编码(marshal) jaxb 对象时出现空文件

JAVA 电子邮件消息 - 剪辑引用行

java - 在 JTextField 中使用 evt.consume() 将小写转换为大写

xml - Groovy:Xml:如何在单个循环中读取已解析的 xml 字符串的文本

xml - 将 Nokogiri 文档转换为 Ruby 哈希