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

Thy*_*hys 10 xml android

任何人都可以指向我解释或向我解释我如何只使用Android OS Lib轻松解析XML并在Android上获取w3c.Document的值?

我试图使用dom4j的实现,但它很慢:-(

Dav*_*ebb 15

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

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

我已经使用了XmlPullParservia 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();
}
Run Code Online (Sandbox Code Playgroud)

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


rui*_*rui 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与SAX对比Android XML API的图表(我现在找不到链接).结论是,DOM是迄今为止最慢的,而SAX是最高的,但并不比Android的XML实现有很大的优势.