当前位置: 首页 > 面试题库 >

为什么Sax解析比dom解析快?stax如何运作?

阙佐
2023-03-14
问题内容

是的,这个问题相当冗长-抱歉。我保持尽可能的密集。我加粗了问题,以便在阅读整本书之前更容易窥视。

为什么Sax解析比dom解析快? 我唯一能想到的是,使用w / sax可能会忽略大多数传入的数据,因此不会浪费时间处理您不在乎的xml部分。IOW-
使用wx解析后,您无法重新创建原始输入。
如果您编写了SAX解析器,以便它考虑到每个xml节点(从而可以重新创建原始XML解析器),那么它不会比DOM快吗?

我问的原因是我试图更快地解析xml文档。解析后,我需要访问整个xml树。我正在编写一个用于插入第三方服务的平台,因此我无法预期xml文档的哪些部分是必需的,哪些部分将不需要。我什至不知道传入文档的结构。这就是为什么我不能使用jaxb或sax的原因。内存占用对我来说不是问题,因为xml文档很小,一次只需要1个内存。现在是时候解析这个相对较小的xml文档,这使我丧命。我以前没有使用过stax,但也许我需要进一步研究,因为这可能是中间立场?
如果我理解正确, 这样,原始的解析时间可能会很快,但是每次我要求它遍历尚未遍历的树的一部分时,那是在何时进行处理?

如果您提供的链接可以回答大多数问题,那么我会接受您的回答(如果在其他地方已经回答过,您不必直接回答我的问题)。

更新:我用sax重写了它,并在平均2.1毫秒的时间内解析了文档。 与dom所用的2.5
ms相比,这是一个改进(快16%),但是这并不是我(等人)会猜到的幅度

谢谢


问题答案:

假设您仅对文档进行分析,则不同的解析器标准的排名如下:

1. StAX是最快的

  • 该活动已报告给您

2.下一个SAX

  • 它可以完成StAX的所有工作,并自动实现内容(元素名称,名称空间,属性等)

3. DOM是最后的

  • 它完成SAX的所有工作,并将信息作为Node的实例显示。

您的用例

  • 如果需要维护所有XML,则DOM是标准表示形式。它与XSLT转换(javax.xml.transform),XPath(javax.xml.xpath)和模式验证(javax.xml.validation)API 完美集成。但是,如果性能是关键,则您可以使用StAX来构建自己的树结构,而不是使用DOM解析器来构建DOM。


 类似资料:
  • 首先,我认为这个错误是因为一个确切的文件。但是错误发生在不同的文件在不同的时间。如何使SAX解析器停止连接到Internet?

  • 问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax Implementation 让我

  • 问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax实现 让我们从实现开始。 你首先必须

  • 问题内容: 我需要解析一个XML流。由于我只需要做一次就可以构建我的java对象,因此SAX看起来很自然。我正在扩展DefaultHandler并实现startElement,endElement和character方法,在我的类中具有保存当前读取值(在characters方法中使用)的成员。 我可以轻松完成所需的工作,但是我的代码变得相当复杂,并且我确信没有理由这样做,并且我可以做不同的事情。我

  • 问题内容: 我正在创建一个复杂的JavaScript库,用于与公司的服务器端框架一起使用。 服务器端框架将其数据编码为简单的XML格式。没有花哨的命名空间或类似的东西。 理想情况下,我想将浏览器中的所有数据解析为JSON。但是,如果这样做,我需要重写一些服务器端代码以吐出JSON。这很痛苦,因为我们拥有无法轻易更改的公共API。 我真正关心的是浏览器中解析JSON和XML的性能。真的有很大的区别要

  • 主要内容:Java StAX解析器 解析XML文档的示例Java StAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写Java StAX解析器 解析XML文档的程序 输出结果为: