Java 反序列化时保存同级元素的顺序

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

我在表单上有一个XML文档

<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