时间:2010-07-23 15:56:43

标签: java xml sax

1 个答案:

答案 0 :(得分:0)

当您使用所谓的“身份”转换转换您的XML(DOM节点)时,您实际正在做的是转换您的XML(这就是您从中获得的)一个空的Transformer())。你指定的源类型(DOMSource或StreamSource)并不重要,因为XSLT无论如何都需要你的内存中的XML(这意味着你最终还是要构建DOM)。由于您的XPath(通常)可以在源树上以任何方式漫游,因此无法将XSLT应用于XML数据流。使用SAX输入,您无法达到您未查看的内容,然后您看到的内容不会保留在内存中或您成为DOM。

您已将XML作为DOM节点存储在内存中。身份转换是一种从输出流中获取输出流的方法,你可以做多少内存消耗(可能尝试不同的变换器实现?)。我也不确定你在下面有什么解析器实现,但你可以看看它是否有这样的东西 - http://xerces.apache.org/xerces-j/apiDocs/org/apache/xml/serialize/XMLSerializer.html。这个人只需沿着元素树向下移动并打印出来。它应该没有内存开销,因为它的功能非常残酷。如果你有一个SAX输入,它将以相同的方式打印它(即没有为XSLT转换构建内存中的演示文稿)。这种方式唯一需要注意的是它是一个特定的API,而不是JAXP的一部分。