Java 反序列化时保存同级元素的顺序
我在表单上有一个XML文档Java 反序列化时保存同级元素的顺序,java,xml,jaxb,Java,Xml,Jaxb,我在表单上有一个XML文档 <element> <aaa></aaa> <bbb></bbb> <aaa></aaa> </element> 我正在使用JAXB反序列化到POJO public class Pojo { List<Aaa> aaaList; List<Bbb> bbbList; } 公共类Pojo{ 名单; 列表bbbLis
<element>
<aaa></aaa>
<bbb></bbb>
<aaa></aaa>
</element>
我正在使用JAXB反序列化到POJO
public class Pojo {
List<Aaa> aaaList;
List<Bbb> bbbList;
}
公共类Pojo{
名单;
列表bbbList;
}
尽管aaa
和bbb
元素最终出现在两个不同的列表中,我希望稍后能够找出它们最初的顺序
在反序列化XML时,是否可以保存原始
aaa
和bbb
元素在其同级元素之间的顺序?换句话说,有没有办法在Aaa
和Bbb
类上创建一个字段int-order
,该字段将自动包含第一个Aaa
的1
,2
对于第一个bbb
和3
对于第一个aaa
?您可以在类aaa
和bbb
中包含一个字段,指示在解组过程中遍历xml时xml中元素的位置,如:
public class Aaa
{
int position;
public int getPosition()
{
return position;
}
public void setPosition( int position )
{
this.position = position;
}
}
类似地,在类Bbb.java
中执行此操作
现在为解组器设置一个侦听器,如下所示:
jaxbUnmarshaller.setListener(new Listener()
{
private int position = 0;
@Override
public void beforeUnmarshal(Object target, Object parent)
{
if ( target instanceof Aaa )
{
position++;
Aaa aaa = (Aaa)target;
aaa.setPosition( position );
}
else if ( target instanceof Bbb )
{
position++;
Bbb bbb = (Bbb)target;
bbb.setPosition( position );
}
}
});
当JAXB解组xml时,侦听器将被调用并设置元素在Aaa
和Bbb
对象中的位置。您可以在它们上使用getPosition()
检索它们
以下代码将打印aaa
和bbb
标签的位置
Elements data = (Elements) jaxbUnmarshaller.unmarshal( file );
List<Aaa> aaas = data.getAaa();
for ( Aaa aaa : aaas )
{
System.out.println( "aaa" + " " + aaa.getPosition() );
}
List<Bbb> bbbs = data.getBbb();
for ( Bbb bbb : bbbs )
{
System.out.println( "bbb" + " " + bbb.getPosition() );
}
aaa 1
aaa 3
bbb 2