我们说我有一个像以下
的XML文件 <root>
<record>foo</record>
<record>bar</record>
</root>
我使用JAXB读取记录。 JAXB是否在bar
之前保留了说foo
的信息?
我的直觉是不,JAXB不保留这些信息。但后来我陷入困境,因为我实际上需要获取这些信息...任何建议......顺便说一下,我无法改变xml的格式。
感谢。
答案 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>
我的回答适用于包含两个元素record2
和record1
的原始XML。
答案 1 :(得分:1)
如果您的XML如下所示:
<root>
<record>foo</record>
<record>bar</record>
</root>
如果您将重复元素映射到java.util.List
,则元素的顺序将保留在List
中。
@XmlElement(name="record")
public List<String> getRecords() {
return records;
}
另一方面,如果您的XML如下所示:
<root>
<hello>foo</hello>
<world>bar</world>
</root>
然后使用Marshaller
将元素编组到XML的顺序将由以下内容控制:
propOrder
注释上的@XmlType
属性。@XmlAccessorOrder
注释使用Binder
将XML解析为DOM并使用Binder解组。然后,您可以更改对象并将这些更改应用回DOM。这允许您保留诸如从原始XML