【问题标题】:Difference among XML SAX parser, Pull parser & DOM Parser in androidandroid中XML SAX解析器、Pull解析器和DOM解析器的区别
【发布时间】:2012-07-03 01:55:00
【问题描述】:

我想知道Android中的XML SAX解析器、Pull解析器和DOM解析器有什么区别。在什么情况下,哪一个在性能和实现上更好?

谢谢。 霍拜布。

【问题讨论】:

    标签: android saxparser xmlpullparser domparser


    【解决方案1】:

    Sax Parser : XML 的简单 API 解析节点到节点,使用自顶向下遍历,解析不存储xml, 与 Dom 相比更快 允许像插入或删除这样的节点操作。 需要 SAXParserFactory

    Dom 解析器: 文档对象模型 在处理之前将整个 xml 存储在内存中,沿任意方向遍历, 不允许像插入或删除这样的节点操作。 需要 DocumentBuilderFactory

    Pull Parser:它提供了比上述两个更多的控制和速度。需要 pullParserFactory

    【讨论】:

    • Sax 和 DOM 不是相反吗? Dom 允许插入和删除,而 Sax 只是一个解析器?参考:docs.oracle.com/javase/6/docs/api/org/w3c/dom/Document.html
    • 嘿,管理员,请根据上面的评论编辑答案(因为这个投票最多):DOM 允许节点插入/删除,而 SAX 不允许't
    • 为什么 Sax 比 Pull 快?对于 Pull,您甚至可以在阅读时停止解析,这意味着您可以在需要时做更少的工作......
    【解决方案2】:

    就性能而言,SAX 通常会使用更少的内存。你只处理你想要的事件,例如startElement()、startDocument()、endElement() 等,因此您只会保存您想要的特定数据。 DOM 会将整个 XML 文件加载到内存中。

    【讨论】:

      【解决方案3】:

      Dom Parser - 它使用基于对象的 方法。即,它首先将整个 XML 加载到内存中,将 XML 节点转换为对象,然后开始解析它们。所以,它相当慢。

      SAX 和 PULL Parser - 他们使用 基于事件的 方法。两者在内存和性能方面几乎相同。但是,对于何时使用它们,几乎没有区别情况,如下所述。

      Dom Parser - 当您需要在解析之前验证整个 XML 时使用它。 当 XML 太大并且验证可能会受到影响时,切勿使用它。 一旦开始解析,它就会从起始节点解析到结束节点。没有办法只解析特定的节点。

      SAX - 当您想要解析整个 XML 时使用它。 一旦开始解析,它就会从起始节点解析到结束节点。没有办法只解析特定的节点。

      PULL - 当您不想解析整个 XML 时使用它。它比 SAX 更容易实现,因为您不必维护解析器的状态。您只能拉取您感兴趣的特定节点。

      我的建议是 - 需要验证 - 使用 DOM,文件大小 或者你不是有兴趣解析整个 XML-Go for PULL,文件大小为 large 或者您需要解析 整个 XML 文件 - 转到 SAX

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 2020-01-17
      • 1970-01-01
      • 2012-08-27
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多