ниже - пример структуры XML, который я пытаюсь проанализировать с использованием подхода синтаксического анализа Android SAX в этом руководстве .
<root>
<parent>
<id></id>
<name></name>
<child>
<id></id>
<name></name>
</child>
<child>
<id></id>
<name> </name>
</child>
</parent>
<parent>
<id></id>
<name></name>
<child>
<id></id>
<name></name>
</child>
</parent>
...
</root>
У меня есть два класса с именами Parent
и Child
. Родитель имеет поле, представляющее собой список дочерних объектов, например:
Родитель
public class Parent {
private String id;
private String name;
private List<Child> childList;
//constructor, getters and setters
// more code
}
Дети
public class Child {
private String id;
private String name;
//constructor, getters and setters
// more code
}
Итак, я создал родительский объект для хранения проанализированных данных. В приведенном ниже коде я могу получить элементы name
и id
для parent
, но не могу понять, как проанализировать элементы child
и их собственные дочерние элементы. Я не знаю, является ли это правильным способом выполнить то, что я пытаюсь сделать.
Может кто-нибудь показать мне путь?
public class AndroidSaxFeedParser extends BaseFeedParser {
public AndroidSaxFeedParser(String feedUrl) {
super(feedUrl);
}
public List<Parent> parse() {
final Parent current = new Parent();
RootElement root = new RootElement("root");
final List<Parent> parents = new ArrayList<Parent>();
Element parent = root.getChild("parent");
parent.setEndElementListener(new EndElementListener() {
public void end() {
parents.add(current.copy());
}
});
parent .getChild("id").setEndTextElementListener(
new EndTextElementListener() {
public void end(String body) {
current.setId(body);
}
});
parent .getChild("name").setEndTextElementListener(
new EndTextElementListener() {
public void end(String body) {
current.setName(body);
}
});
try {
Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8,
root.getContentHandler());
} catch (Exception e) {
throw new RuntimeException(e);
}
return parents ;
}
}