如何使用JAXB维护输入订单信息?

时间:2014-10-13 18:49:43

标签: jaxb

我们说我有一个像以下

的XML文件
    <root>
      <record>foo</record>
      <record>bar</record>
    </root>

我使用JAXB读取记录。 JAXB是否在bar之前保留了说foo的信息?

我的直觉是不,JAXB不保留这些信息。但后来我陷入困境,因为我实际上需要获取这些信息...任何建议......顺便说一下,我无法改变xml的格式。

感谢。

2 个答案:

答案 0 :(得分:1)

你真的尝试过吗?

JAXB的@XmlType注释作为propOrder属性,用于定义属性的顺序。

所以你可以这样做:

@XmlRootElemen(name="root")
@XmlType(propOrder={"record2", "record1"})
public class Root {

  public String record1;
  public String record2;

}

<强>更新

OP已经编辑了他原来的XML:

<root>
  <record2>
  <record1>
</root>

对此:

<root>
  <record>foo</record>
  <record>bar</record>
</root>

我的回答适用于包含两个元素record2record1的原始XML。

答案 1 :(得分:1)

订单&amp;重复元素

如果您的XML如下所示:

<root>
  <record>foo</record>
  <record>bar</record>
</root>

如果您将重复元素映射到java.util.List,则元素的顺序将保留在List中。

@XmlElement(name="record")
public List<String> getRecords() {
    return records;
}

订单&amp;非重复元素

另一方面,如果您的XML如下所示:

<root>
  <hello>foo</hello>
  <world>bar</world>
</root>

使用Marshaller

然后使用Marshaller将元素编组到XML的顺序将由以下内容控制:

  • propOrder注释上的@XmlType属性。
  • @XmlAccessorOrder注释

使用Binder

使用Binder将XML解析为DOM并使用Binder解组。然后,您可以更改对象并将这些更改应用回DOM。这允许您保留诸如从原始XML

排序等方面