使用android sax解析器解析XML

发布于 2024-09-29 06:49:49 字数 2732 浏览 8 评论 0原文

下面是我尝试使用 Android SAX 解析方法解析的 XML 示例结构 教程

<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>

我有两个名为 ParentChild 的类。 Parent 有一个字段,它是 Child 对象的列表,例如这个。

Parent

public class Parent {

    private String id;
    private String name;
    private List<Child> childList;

    //constructor, getters and setters

    // more code

}

Child

public class Child {

    private String id;
    private String name;

    //constructor, getters and setters

    // more code

}

因此我创建了一个 Parent 对象来存储解析的数据。在下面的代码中,我可以获取 parentnameid 元素,但我不知道如何解析 child code> 元素及其自己的子元素。我不知道这是否是完成我想做的事情的正确方法。

有人可以告诉我一种方法吗?

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 ;
    }
}

below is a sample structure of the XML I'm trying to parse using the Android SAX parsing approach in this tutorial.

<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>

I have two classes named Parent and Child. Parent has a field which is a list of Child objects, such as this.

Parent

public class Parent {

    private String id;
    private String name;
    private List<Child> childList;

    //constructor, getters and setters

    // more code

}

Child

public class Child {

    private String id;
    private String name;

    //constructor, getters and setters

    // more code

}

So I created a Parent object to store the parsed data. In the code below I can get the name and id element of parent but I cant figure out how to parse the child elements and their own child elements. I dont know if this is the right way to accomplish what I'm trying to do.

Can someone show me a way?

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 ;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

扮仙女 2024-10-06 06:49:49
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);
            }
        });
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);
            }
        });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文