Java 嵌套SAX内容处理程序
我想使用SAX解析一个文档,并从一些元素创建一个子文档,同时纯粹使用SAX处理其他元素。因此,鉴于这份文件:Java 嵌套SAX内容处理程序,java,xml,dom,parsing,sax,Java,Xml,Dom,Parsing,Sax,我想使用SAX解析一个文档,并从一些元素创建一个子文档,同时纯粹使用SAX处理其他元素。因此,鉴于这份文件: <DOC> <small> <element /> </small> <entries> <!-- thousands here --> </entries> </DOC> 我想使用SAX ContentHandler解析DOC
<DOC>
<small>
<element />
</small>
<entries>
<!-- thousands here -->
</entries>
</DOC>
我想使用SAX ContentHandler解析DOC和DOC/entries元素,但当我点击时,我想创建一个新文档,其中只包含元素及其子元素
有没有一种简单的方法可以做到这一点,或者我必须自己手工构建DOM?在我看来,答案取决于您是否需要内存中的“新文档”。如果您使用DOM,或者如果您只是要流式处理“新文档”,那么StAX可能更适合SAX的事件驱动特性。在我看来,答案取决于您是否需要内存中的“新文档”。如果您使用DOM,或者如果您只是要流式处理“新文档”,那么StAX可能更适合SAX的事件驱动特性。一种方法是创建一个ContentHandler,用于监视发出元素进入或退出信号的事件。此处理程序充当代理,在正常模式下,将SAX事件直接传递给真正的ContentHandler 但是,当检测到元素中的条目时,代理负责创建一个无操作的空转换,最多为一个。TransformerHandler期望一个完整、格式良好的文档能够产生所有事件;您无法立即向其发送startElement事件。相反,首先通过调用TransformerHandler实例上的setDocumentLocator、startDocument和其他必要事件来模拟新文档的开头
然后,直到代理检测到元素的结尾,所有事件都会转发到此TransformerHandler,而不是真正的ContentHandler。当遇到结束标记时,代理通过调用TransformerHandler上的endDocument来模拟文档的结尾。DOM现在作为TransformerHandler的结果可用,它只包含片段。一种方法是创建一个ContentHandler,用于监视发出元素进入或退出信号的事件。此处理程序充当代理,在正常模式下,将SAX事件直接传递给真正的ContentHandler 但是,当检测到元素中的条目时,代理负责创建一个无操作的空转换,最多为一个。TransformerHandler期望一个完整、格式良好的文档能够产生所有事件;您无法立即向其发送startElement事件。相反,首先通过调用TransformerHandler实例上的setDocumentLocator、startDocument和其他必要事件来模拟新文档的开头
然后,直到代理检测到元素的结尾,所有事件都会转发到此TransformerHandler,而不是真正的ContentHandler。当遇到结束标记时,代理通过调用TransformerHandler上的endDocument来模拟文档的结尾。DOM现在是TransformerHandler的结果,它只包含片段。我从一个SAX流中同时构建多个文档没有问题。对于任何面向业务文档的流来说,它几乎都是SOP。你做那件事有什么困难?类的层次结构不需要与SAX流的层次结构匹配。我从一个SAX流中同时生成多个文档没有问题。对于任何面向业务文档的流来说,它几乎都是SOP。你做那件事有什么困难?类的层次结构不需要与SAX流的层次结构匹配