2017-06-01 118 views
0

时保存它的兄弟姐妹中有一个元素的顺序我有形式反序列化

<element> 
    <aaa></aaa> 
    <bbb></bbb> 
    <aaa></aaa> 
</element> 

说我反序列化到使用JAXB一个POJO上的XML文档。

public class Pojo { 
    List<Aaa> aaaList; 
    List<Bbb> bbbList; 
} 

尽管在aaabbb元素最终在两个不同的名单我希望以后能找出他们是哪个顺序原本。

是否有可能节省的顺序原始的aaabbb元素当他们的兄弟姐妹反序列化的XML?换句话说,有没有什么办法来创建一个字段上AaaBbb类,它会自动包含1第一个aaa2的第一bbb3第一个aaaint order

回答

1

你可以包括一个字段在类AaaBbb指示元素在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,监听器被调用,并设置在AaaBbb对象元素的位置。你可以使用getPosition()来检索它们。

以下代码将打印aaabbb标记的位置。

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