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_Sax - Fatal编程技术网

Java 使用SAX在节点上运行转换

Java 使用SAX在节点上运行转换,java,xml,sax,Java,Xml,Sax,有一个扩展的Java应用程序,它可以做很多修改,包括合并xml文件。这是使用dom类完成的,似乎工作得很好。最后,我想格式化生成的xml,使其更易于读取并存储为字符串。开始时,dom也是这样做的,但它限制了我可以格式化的文件的大小。 目前的代码是: public String parseToString(Node node) { Transformer transformer = null; StringBuffer buffer = null; try {

有一个扩展的Java应用程序,它可以做很多修改,包括合并xml文件。这是使用dom类完成的,似乎工作得很好。最后,我想格式化生成的xml,使其更易于读取并存储为字符串。开始时,dom也是这样做的,但它限制了我可以格式化的文件的大小。
目前的代码是:

public String parseToString(Node node) {  
  Transformer transformer = null;  
  StringBuffer buffer = null;  
  try {  
    Transformer = TransformerFactory.newInstance().new Transformer();  
    --- set some OutputProperties ---  
    StringWriter stringWriter = new StringWriter(512);  
    transformer.transform(new DOMSource(node), new StreamResult(stringWriter));  
    buffer = stringWriter.getBuffer();  
    stringWriter.close();  
    --- catch phrases ---  
    return(buffer.toString());  
}    

我的理解是,要使用SAX,我需要将“new DOMSource()”替换为“new StreamSource()”,但要做到这一点,我需要将节点(实际上是完整的文档)转换为字符串。在不占用更多内存的情况下,最简单的方法是什么?

格式化方式时,您实际要做的是使用所谓的“标识”转换(即从空转换器()获得的转换)转换XML(DOM节点)。您指定的源类型(DOMSource或StreamSource)实际上并不重要,因为XSLT无论如何都需要内存中的XML(这意味着您无论如何都要构建DOM)。由于XPath(通常)可以在源代码树上随意移动,所以不可能将XSLT应用于XML数据流。使用SAX输入,您无法访问您未查看的内容,然后您所查看的内容将无法保留在内存中,或者成为DOM

内存中已经有XML作为DOM节点。身份转换是从中获取输出流的一种方法,对于它将消耗多少内存,您无能为力(可能尝试不同的transformer实现?)。我也不确定下面有什么解析器实现,但您可以看看它是否有这样的东西-。这家伙只需沿着元素树向下移动并打印出来。它应该没有内存开销,因为它所做的是相当残酷的。如果您有一个SAX输入,它将以相同的方式打印出来(也就是说,无需构建一个准备好XSLT转换的内存中表示)。这样做的唯一警告是,它是一个特定的API,而不是JAXP的一部分