如何使用 SAX 处理程序分析 JAVA DOM 文档?

How to analyze a JAVA DOM Document using a SAX handler?

我将在我的代码中编写一个新功能,以 memory/CPU-efficient 的方式处理一些 XML 数据。它主要分析文件、流、字节数组等数据,所以SAXParser似乎符合上述所有要求。

不幸的是,这个新功能还需要分析一些 XML 数据,这些数据是由使用 DOM 解决方案和 returns 文档 类 的旧代码生成的。

当然我可以将DOM文档保存到file/stream/byte数组等,然后使用SAXParser来处理它,但是这样的解决方案需要额外的内存space来保存从数据处理的角度来看完全不需要的数据。

因此,我正在寻找某种 DOM 文档爬虫,它读取已经存在的 DOM 数据,但使用 SAX 处理程序来处理它,这将允许我实现基本的处理逻辑在我的自定义 SAX 处理程序中只使用一次并且还使用任何类型的输入数据。

你遇到过这样的事情吗?

您使用身份转换将 XML 从 DOM 树提供给 SAX 处理程序:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),
                      new SAXResult(handler));

DOMSource constructor takes a Node,所以你可以只给它一个 DOM 文档的一部分,即 片段 .

SAXResult constructor takes the ContentHandler that you would normally give to the XMLReader in the setContentHandler(...) 调用。