首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套SAX ContentHandlers

嵌套SAX ContentHandlers
EN

Stack Overflow用户
提问于 2008-12-12 16:41:59
回答 3查看 695关注 0票数 1

我想使用SAX解析文档,并从一些元素创建一个子文档,而使用SAX处理其他元素。因此,给出这篇文档:

代码语言:javascript
复制
  <DOC>
    <small>
      <element />
    </small>
    <entries>
      <!-- thousands here -->
    </entries>
  </DOC>

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-12 17:59:54

一种方法是创建一个ContentHandler,用于监视发出进入或退出<small>元素信号的事件。这个处理程序充当代理,在“正常”模式下将SAX事件直接传递给“真正的”ContentHandler

但是,当检测到进入<small>元素时,代理负责创建TransformerHandler (使用无操作的“空”转换),plumbed直到DOMResultTransformerHandler期望一个完整的、格式良好的文档所产生的所有事件;您不能立即向它发送startElement事件。相反,可以通过首先在TransformerHandler实例上调用setDocumentLocatorstartDocument和其他必要事件来模拟新文档的开头。

然后,在代理检测到<small>元素的末尾之前,所有事件都将转发到此TransformerHandler,而不是“真正的”ContentHandler。当遇到结束</small>标记时,代理通过在TransformerHandler上调用endDocument来模拟文档的结尾。DOM现在作为TransformerHandler的结果可用,它只包含<small />片段。

票数 4
EN

Stack Overflow用户

发布于 2008-12-12 17:07:21

在我看来,答案取决于你是否需要内存中的“新文档”。如果你这样做了,那么使用DOM,或者如果你只是想流式传输“新文档”,那么StAX可能更适合SAX的事件驱动性质。

票数 1
EN

Stack Overflow用户

发布于 2008-12-12 18:33:47

我在一个SAX流中构建多个并发文档是没有问题的。对于任何面向业务文档的流,它几乎都是SOP。你这样做有什么困难吗?类的层次结构不必与SAX流的层次结构匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/363325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档