Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套SAX内容处理程序_Java_Xml_Dom_Parsing_Sax - Fatal编程技术网

Java 嵌套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

我想使用SAX解析一个文档,并从一些元素创建一个子文档,同时纯粹使用SAX处理其他元素。因此,鉴于这份文件:

  <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流的层次结构匹配