【问题标题】:How SAX parser finds a node without parsing the entire xmlSAX 解析器如何在不解析整个 xml 的情况下找到节点
【发布时间】:2013-08-08 23:06:48
【问题描述】:

在这个关于 dom 与 sax 的讨论中here

选择的答案是:

DOM is easier to use but has an overhead of parsing the entire XML before you can start using it

我知道在 SAX 中,您不需要解析整个 xml。 假设我正在使用 Sax 解析器并且我想找到一个特定的节点。现在如果节点接近 xml 文档的末尾,sax 解析器如何在不解析整个 xml 的情况下找到它?

我的另一个问题是为什么在 sax 中我们不能插入/删除节点? 出于某种原因,这些答案在“sax 是基于事件的”语句中并不明显。

【问题讨论】:

    标签: dom sax


    【解决方案1】:

    Dom 和 Sax 方法都读取所有文件!

    这只是意味着 Dom 正在解析每个节点,以便它在内存中创建一棵树,您可以在其中使用 Dom 请求获得所需的内容。

    Sax 不同,它不解析文件,它只会在读取文件时发生的每个事件后通过回调通知您,例如:startDocument、startElement、endElement、endDocument... 在这些方法中您可以例如,检查每个标签/属性的名称,然后选择您感兴趣的内容。

    【讨论】:

    • 谢谢,但请详细说明。在您的第一行中,您说这两种方法都读取了所有文件,但是您说 sax 不解析文件。
    • 我的意思是这两种方法都将文件加载到内存中并逐行读取,但 SAX 没有做任何额外的工作,它只是触发一些您可以捕获的事件以实际存储(解析)数据你要。当 Dom 为您和所有文档做这件事时,Dom 让您可以通过 DOM 请求轻松访问文件的每个元素
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 2012-08-27
    • 2011-04-30
    • 2011-05-16
    • 2011-05-31
    • 1970-01-01
    • 2015-04-12
    • 2023-04-02
    相关资源
    最近更新 更多