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

时间:2010-09-02 08:50:45

标签: java android xml

与PC /服务器相比,Android设备速度更慢,内存更低,那么在Android中处理XML的最佳方式是什么?我有一组非常复杂的xml需要解析。 SAX或DOM都会导致代码过多。有人有好的建议吗?我想让它干净而快速

4 个答案:

答案 0 :(得分:2)

您在应用程序中使用的解析器类型取决于您的要求。您也可以尝试XMLPullParser。你可以在这里看到所有三个解析器的性能..

http://www.developer.com/ws/article.php/10927_3824221_2/Android-XML-Parser-Performance.htm

还有一些第三方XML解析器也可用......我使用这个解析器用于我以前的一个应用程序并且速度非常快。它有Xpath实现。

http://vtd-xml.sourceforge.net/

答案 1 :(得分:1)

不要太在意类文件的大小(“代码”),关心应用程序的内存消耗。对于android,建议实现SAX解析器并仅提取内部数据模型所需的信息。

DOM构建器将为内存中的完整XML文档创建一个文档,这可能会导致性能问题。

答案 2 :(得分:1)

XMLPullParser看起来是最好的选择。 检查Quick Introduction to XmlPull v1 API

另请查看vtd-xml。 根据他们的home page

  • 世界上最具记忆效率的 (1.3x~1.5倍的XML大小 document)随机访问XML解析器。
  • 世界上最快的XML解析器:on a Core2 2.5Ghz笔记本电脑,VTD-XML 优于DOM解析器5x~12x, 每个核心提供90~120 MB /秒的速度 持续吞吐量。
  • 世界上最快的XPath 1.0 实施
  • 世界上最高效的XML 无缝集成的索引器 使用您的XML应用程序。
  • 世界上唯一的增量更新 有能力的XML解析器 切割,粘贴,分裂和 用最大值组装XML文档 效率
  • 世界上唯一的XML解析器 允许您使用XPath进行处理 256 GB XML文档。

以下链接还有各种选项供您使用:

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

答案 3 :(得分:1)

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

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

下面是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