2017-06-01 181 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