2011-07-27 54 views
3

我正在使用Simple XML Framework來解析XML文件。使用簡單的XML框架繼承

從服務器,我收到一個XML的文件看起來是這樣的:

<Objects> 
    <Object type="A"> 
     <name></name> 
     <color></color> 
    </Object> 
    <Object type="B"> 
     <shape></shape> 
     <weight></weight> 
    </Object> 
<Objects> 

我有一個接口(或超)對象和兩個子類一個

是否可以反序列化這個XML文檔?

我在Tutorial看到有與 -attribute子類之間進行區分的可能性,但不幸的是這是不可能的我。有沒有辦法選擇框架在類型屬性的基礎上選擇正確的子類?

我不能使用其他框架(如JAXB),因爲我使用Android ..

回答

1

簡單的XML可以做到這一點,如果你願意讓你的XML一個微小的變化。因此,在你的榜樣,你可以更改的XML看起來像這樣:

<Objects> 
    <A> 
     <name></name> 
     <color></color> 
    </A> 
    <B> 
     <shape></shape> 
     <weight></weight> 
    </B> 
<Objects> 

然後你可以有以下Java:

@ElementListUnion({ 
    @ElementList(entry = "A", inline = true, type = A.class), 
    @ElementList(entry = "B", inline = true, type = B.class) 
} 
private List<BaseClass> objects; 

,這是所有真的有它。雖然我不認爲它可以基於屬性來完成。我可能是錯的,但你可能想要read the docs那個。

0

這將是棘手的做,如果你不能使用類屬性,像這樣:

<Objects> 
    <Object class="ObjectA"> 
    <name></name> 
    <color></color> 
    </Object> 
    <Object class="ObjectB"> 
    <shape></shape> 
    <weight></weight> 
    </Object> 
<Objects> 

爲什麼將其送入之前類取代你type="A"type="B"屬性,使用正則表達式,簡單的XML解串器?例如:

xml = xml.replaceAll("type=\"([A-Za-z0-9_]+)\", "class=\"$1\""); 

我能夠使用由.NET的XML序列化器,它使用屬性xsi:type指示在多態列出了特定的類類型,如這一個產生這一招解析XML。