在Android上解析XML(org.w3c.Document)的方法

时间:2009-12-18 10:22:58

标签: xml android

有人能指点我解释或解释我如何只使用Android OS Lib轻松解析XML并在Android上获取w3c.Document的值吗?

我尝试使用dom4j的实现,但速度非常慢: - (

3 个答案:

答案 0 :(得分:15)

这是一个article at Developer.com比较Android上DOM,SAX和Pull解析器的性能。它发现DOM解析器是最慢的,然后Pull解析器和SAX解析器在他们的测试中最快。

如果您要在应用程序中进行大量解析,可能需要对不同选项进行基准测试,以确定哪种方法最适合您。

我已使用XmlPullParser通过XmlResourceParser,发现效果很好并且易于使用。

它通过XML返回事件来告诉你它在那里发现了什么。

如果您使用它,您的代码将如下所示:

XmlResourceParser parser = context.getResources().getXml(R.xml.myfile);

try {
    int eventType = parser.getEventType();

    while (eventType != XmlPullParser.END_DOCUMENT) {
        String name = null;

        switch (eventType){
            case XmlPullParser.START_TAG:
                name = parser.getName().toLowerCase();

                if (name.equals(SOME_TAG)) {
                    for (int i = 0;i < parser.getAttributeCount();i++) {
                        String attribute = parser.getAttributeName(i).toLowerCase();

                        if (attribute.equals("myattribute")) {
                            String value = parser.getAttributeValue(i);
                        }

                    }
                }

                break;
            case XmlPullParser.END_TAG:
                name = parser.getName();
                break;
        }

        eventType = parser.next();
    }
}
catch (XmlPullParserException e) {
    throw new RuntimeException("Cannot parse XML");
}
catch (IOException e) {
    throw new RuntimeException("Cannot parse XML");
}
finally {
    parser.close();
}

如果要解析不是来自资源文件的XML,可以使用XmlPullParserFactory class创建新的XmlPullParser,然后调用setInput() method

答案 1 :(得分:11)

您应该明确使用提供的SAX API。 Android XML解析API堆栈在普通的Java SAX之上,所以在我看来我只会使用普通的Java SAX API,这样你就可以像普通的java桌面项目一样测试你的代码。

XML解析总是很慢,并且使用这些SAX解析器就好了(除非你从头开始编写自定义解析器)。 建议:尝试最小化字符串比较并尝试使用hashmaps而不是if(token.isEqual(CONSTANT_TOKEN))的长链;。

以下是Java XML解析的几个示例:http://java.sun.com/developer/codesamples/xml.html#sax

Android XML API是声明性的,范例有点不同,所以如果您决定使用它,请准备好阅读一些示例来了解它的方法。

最后,也许2个月前我看到了一个图表,对比了DOM vs SAX和Android XML API(我现在找不到链接)。结论是DOM是迄今为止最慢的,SAX是顶级的,但与Android的XML实现相比没有太大的优势。

答案 2 :(得分:1)

我们也可以在Android XML Parsing Things中使用 XPath ..

当您要以数组的形式解析大量数据时,它非常有用。

在解析Android的XML内容时,请查看此Link以获取XPath教程。

享受!!