任何人都可以指向我解释或向我解释我如何只使用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实现有很大的优势.
| 归档时间: |
|
| 查看次数: |
14309 次 |
| 最近记录: |