Синтаксический анализ XML с помощью android sax parser - PullRequest
0 голосов
/ 26 октября 2010

ниже - пример структуры 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 ;
    }
}

1 Ответ

1 голос
/ 06 апреля 2011
parent.getChild("child").getChild("id").setEndTextElementListener(
                new EndTextElementListener() {
            public void end(String body) {
                current.setChildId(body);
            }
        });
parent.getChild("child").getChild("name").setEndTextElementListener(
                new EndTextElementListener() {
            public void end(String body) {
                current.setChildName(body);
            }
        });
...