gpt4 book ai didi

java - 嵌套 SAX ContentHandlers

转载 作者:行者123 更新时间:2023-11-29 08:20:11 24 4
gpt4 key购买 nike

我想使用 SAX 解析文档,并从某些元素创建子文档,同时完全使用 SAX 处理其他元素。因此,鉴于此文档:

  <DOC>
<small>
<element />
</small>
<entries>
<!-- thousands here -->
</entries>
</DOC>

我想使用 SAX ContentHandler 解析 DOC 和 DOC/entries 元素,但是当我点击 <small> 时我想创建一个仅包含 <small> 的新文档及其子项。

有没有一种简单的方法可以做到这一点,还是我必须自己手动构建 DOM?

最佳答案

一种方法是创建一个 ContentHandler监视表明从 <small> 进入或退出的事件元素。此处理程序充当代理,并在“正常”模式下将 SAX 事件直接传递到“真实”ContentHandler。 .

但是,当进入一个<small>检测到元素,代理负责创建一个 TransformerHandler (无操作,“空”转换),plumbed直到 DOMResult . TransformerHandler期望一个完整的、格式良好的文档会产生的所有事件;你不能立即给它发送 startElement事件。相反,通过调用 setDocumentLocator 来模拟新文档的开头。 , startDocument ,以及关于 TransformerHandler 的其他必要事件先举例。

然后,直到<small>结束代理检测到元素元素,所有事件都转发到此 TransformerHandler而不是“真实的”ContentHandler .收盘时</small>遇到标记时,代理通过调用 endDocument 来模拟文档的结尾在 TransformerHandler 上. TransformerHandler 的结果是现在可以使用 DOM ,其中仅包含 <small />片段。

关于java - 嵌套 SAX ContentHandlers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/363325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com