在 Android 上解析 XML (org.w3c.Document) 的方法
Posted
技术标签:
【中文标题】在 Android 上解析 XML (org.w3c.Document) 的方法【英文标题】:Way to parse XML (org.w3c.Document) on Android 【发布时间】:2010-12-27 23:56:18 【问题描述】:谁能指出我的解释或向我解释我如何在仅使用 android OS Libs 的 Android 上轻松解析 XML 并获取 w3c.Document 的值?
我尝试使用 dom4j 的实现,但速度很慢 :-(
【问题讨论】:
【参考方案1】:这是一个article at Developer.com 比较 Android 上 DOM、SAX 和 Pull 解析器的性能。它发现 DOM 解析器是迄今为止最慢的,然后是 Pull 解析器和 SAX 解析器在他们的测试中最快。
如果您要在应用程序中进行大量解析,则可能值得对不同的选项进行基准测试,看看哪个最适合您。
我通过XmlResourceParser
使用了XmlPullParser
,发现它运行良好且易于使用。
它通过 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。
【讨论】:
有没有办法用 XmlResourceParser 解析远程 XML? XmlResourceParser 是 XmlPullParser 的子类。我应该一直在谈论那个。我已添加到答案中,以展示如何使用 XmlPullParser 解析远程 XML。 是的,直接使用 PullParser:developer.android.com/reference/org/xmlpull/v1/…【参考方案2】:您应该明确使用提供的 SAX API。 Android XML 解析 API 堆栈在普通 java SAX 之上,所以我认为我只会使用普通 Java SAX API,这样你就可以像普通 java 桌面项目一样测试你的代码。
XML 解析总是很慢,并且使用这些 SAX 解析器就可以了(除非您从头开始编写自定义解析器)。 忠告:尽量减少字符串比较并尝试使用哈希图而不是 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 实现相比并没有很大的差距。
【讨论】:
嗨 ruibm 它对我也很有用.. 你能展示如何使用哈希图而不是长链 if 条件...【参考方案3】:我们也可以在 Android XML Parsing Things 中使用 XPath ..
当您要以数组的形式解析大量数据时,它很有用。
查看此Link 了解从 Android 解析 XML 内容的 XPath 教程。
尽情享受吧!
【讨论】:
以上是关于在 Android 上解析 XML (org.w3c.Document) 的方法的主要内容,如果未能解决你的问题,请参考以下文章