与PC /服务器相比,Android设备速度更慢,内存更低,那么在Android中处理XML的最佳方式是什么?我有一组非常复杂的xml需要解析。 SAX或DOM都会导致代码过多。有人有好的建议吗?我想让它干净而快速
答案 0 :(得分:2)
您在应用程序中使用的解析器类型取决于您的要求。您也可以尝试XMLPullParser
。你可以在这里看到所有三个解析器的性能..
http://www.developer.com/ws/article.php/10927_3824221_2/Android-XML-Parser-Performance.htm
还有一些第三方XML解析器也可用......我使用这个解析器用于我以前的一个应用程序并且速度非常快。它有Xpath实现。
答案 1 :(得分:1)
不要太在意类文件的大小(“代码”),关心应用程序的内存消耗。对于android,建议实现SAX解析器并仅提取内部数据模型所需的信息。
DOM构建器将为内存中的完整XML文档创建一个文档,这可能会导致性能问题。
答案 2 :(得分:1)
XMLPullParser看起来是最好的选择。 检查Quick Introduction to XmlPull v1 API。
以下链接还有各种选项供您使用:
答案 3 :(得分:1)
您最好的选择是SAX或XMLPull。 Android为两者提供API。这里的主要区别是:
下面是XmlPull解析的一个例子:
try {
reader = new InputStreamReader(...from soem input stream);
XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
parser.setInput(reader);
parser.require(XmlPullParser.START_DOCUMENT, null, null);
// get the event type
int eventType = parser.getEventType();
// see what type of event it is...
while(eventType != XmlPullParser.END_DOCUMENT) {
String pName = parser.getName();
switch(eventType) {
case XmlPullParser.START_TAG:
if(pName.equals("sometag")) {
// get the textcontent
String msg = parser.nextText();
// get attribute value
String strErrCode = parser.getAttributeValue(null, "somattr");
break;
case XmlPullParser.END_TAG:
if(pName.equals("sometag")) {
// do something
}
break;
default:
break;
}
eventType = parser.next(); // parse next and generate event
} // while loop
}catch(Exception e) {
String msg = e.getMessage();
Log.e(TAG, "Error while parsing response: " + msg, e);
}
这是关于如何进行拉解析的quick intro