在Android中处理XML的最佳方式是什么?

3

相对于PC/server,Android设备速度较慢,内存更少,因此在Android上处理XML的最佳方式是什么?我有一组非常复杂的XML需要解析。使用SAX或DOM都会导致大量代码。是否有好的建议?我希望使其清晰快速。

4个回答

2

1
第一个链接是404 - 已移动到http://www.developer.com/ws/android/development-tools/Android-XML-Parser-Performance-3824221.htm。 - Mr. Bungle

1

你最好选择SAXXMLPull。Android为两者都提供了API。这里的主要区别是:

  • SAX中,解析器驱动解析并在你的代码上进行回调
  • 在pull解析中,用户代码驱动解析。

以下是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);
  }

这里是一个快速介绍,讲述如何进行拉取解析


Pull解析器虽然减少了一些代码,但由于XML的结构非常复杂,代码库仍然很大。 - Jammy Lee

1
不要过于关注类文件(“代码”)的大小,而是要关注应用程序的内存消耗。对于Android来说,建议实现SAX解析器,并仅提取所需信息到内部数据模型中。
DOM构建器将在内存中为完整的XML文档创建一个文档,这可能会导致性能问题。

我必须关注代码的大小,因为 XML 格式可能会在未来发生变化,我还必须担心维护成本。 - Jammy Lee
我明白 - 我以为你想保持代码库的小巧,因为该应用程序是为Android手机设计的。 - Andreas Dolk

1

XMLPullParser 看起来是最好的选择。 请查看XmlPull v1 API的快速介绍

同时也要看一下vtd-xml。 根据他们在主页上的介绍,

  • 世界上最省内存的随机访问 XML 解析器(比 XML 文档大小小 1.3 倍至 1.5 倍)。
  • 世界上速度最快的 XML 解析器:在 Core2 2.5Ghz 笔记本电脑上,VTD-XML 的性能比 DOM 解析器快 5 倍至 12 倍,提供每个核心可持续吞吐量为 90 至 120 MB/秒。
  • 世界上实现速度最快的 XPath 1.0。
  • 世界上最高效的 XML 索引器,可以与您的 XML 应用程序无缝集成。
  • 世界上唯一一款有增量更新功能的 XML 解析器,可以以最大效率裁剪、粘贴、拆分和组装 XML 文档。
  • 世界上唯一一款可以使用 XPath 处理 256 GB XML 文档的 XML 解析器。

以下链接还有其他您可以使用的选项:

http://www.ibm.com/developerworks/xml/library/x-android/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接