2016-05-03 4 views
1

Я разрабатываю проект Android, основанный на Simple Framework. Некоторое время я заметил, что должен выполнить динамический синтаксический анализ. Короче говоря, у меня есть большой xml-файл, загруженный из бэкэнд. Этот XML-файл может содержать теги, которые могут время от времени отличаться и неизменные теги, которые используются моим приложением.Simple Framework - неизвестные теги xml parsing

Давайте предположим, что у меня есть этот 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-файл, чтобы отправить обратно на сервер там i s no x1..xN теги, потому что я не знаю, как их поддерживать в моей модели.

Мое приложение основано на большом слое модели, который содержит классы pojo, поэтому мне нужно найти решение, в котором хранятся неизвестные теги.

ответ

1

Вы можете попробовать создать настраиваемый NoteConverter.

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 
    } 

} 

Annotate Отмечают с @Convert (NoteConverter.class)
Добавить AnnotationStrategy вашему сериализатором

+0

Спасибо за ваш ответ, если conventers единственный способ решить эту проблему, я постараюсь сделать это и я даю вам свой результат. Также у меня есть еще один вопрос: что, если у меня есть еще один объект класса с помощью conventer, который вложен в класс Note? Будет ли второй конвейер запускаться первым и вернуться к использованию (с объектами xml) объекта в Note conventer? – unixhead