2016-05-03 39 views
1

我正在開發基於簡單框架的Android項目。有一段時間我注意到我必須實現動態解析。簡而言之,我從後端下載了一個很大的xml文件。這個xml文件可以包含標籤,這些標籤可能會隨時間不同而不同,我的應用程序使用不可更改的標籤。簡單的框架 - 未知的XML標籤解析

比方說,我有這樣的XML文件:

<note> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <body>Don't forget me this weekend!</body> 
    <age>33</age> 
</note> 

和Java模型類

@Root(name="note", strict = false)  
public class Note { 
    @Element(name = "to", required = false) 
    public String to; 
    @Element(name = "from", required = false) 
    public String from; 
    @Element(name = "heading", required = false) 
    public String heading; 
    @Element(name = "body", required = false) 
    public String body; 
    @Element(name = "age", required = false) 
    public int age; 

    //getters/setters... 
} 

但有時我可以下載XML這可以看起來像這樣(X1 - 未知名):

<note> 
    <x1>content...</x1> 
    <to>Tove</to> 
    <from>Jani</from> 
    <heading>Reminder</heading> 
    <x2>content...</x2> 
    <body>Don't forget me this weekend!</body> 
    <age>33</age> 
    <x3>content...</x3> 
    <xN>content...</xN> 
</note> 

在這種情況下,當我的應用程序讀取/編輯此xml並保存到xml文件發回到後端時,沒有x1..xN標籤,因爲我不知道如何保持他們在我的模型。

我的應用程序基於包含pojo類的大型模型圖層,所以我需要找到一個解決方案來存儲這個未知標籤。

回答

1

您可以嘗試創建自定義NoteConverter。與@Convert(NoteConverter.class)

public class NoteConverter implements Converter<Note> { 

    public Note read(InputNode node) { 
     // manually read all nodes 
     // assign values to members: to, from, heading, body, age 
     // other values save in some structure ex. Map inside the Note element 

     return note; 
    } 

    public void write(OutputNode node, Note note) { 
     // manually write note into outputNode 
     // first write members: to, from, heading, body, age 
     // finally write other nodes stored in map created in read function 
    } 

} 

標註注
添加AnnotationStrategy你的串行

+0

謝謝您的回答,如果conventers是解決這一問題的唯一途徑,我會嘗試這樣做,我給你我的結果。另外我還有一個問題,當我有一個嵌套在Note類中的召集器的另一個類對象時會發生什麼?第二次召集人會先運行並返回準備使用(帶有xml值)的對象來注意召集人? – unixhead