Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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-文档到流源的转换_Java_Dom_Xslt - Fatal编程技术网

java-文档到流源的转换

java-文档到流源的转换,java,dom,xslt,Java,Dom,Xslt,对于XSLT转换,我需要一个javax.xml.transform.stream.StreamSource对象,表示正在转换的xml文件。我只有一个org.w3c.dom.Document类型的对象。如何将文档转换为流源?在此上下文中,您需要将文档转换回某种流(字符或字节),以便将其作为流源处理 如果文档很小,最简单的方法可能是将其转换为字符串,在此基础上创建StringReader,并将该读取器传递给StreamSource构造函数。如果文档较大(或大小未知),序列化它可能会占用太多内存,则必

对于XSLT转换,我需要一个javax.xml.transform.stream.StreamSource对象,表示正在转换的xml文件。我只有一个org.w3c.dom.Document类型的对象。如何将文档转换为流源?

在此上下文中,您需要将
文档
转换回某种流(字符或字节),以便将其作为
流源处理

如果文档很小,最简单的方法可能是将其转换为字符串,在此基础上创建
StringReader
,并将该读取器传递给StreamSource构造函数。如果文档较大(或大小未知),序列化它可能会占用太多内存,则必须创建和以实现相同的目标(由于需要管理线程,这是一种痛苦,但如果临时转储整个文档已过时,则这是不可避免的)

另一种方法可能是首先查看
文档
的来源。无论如何,它很有可能以某种流的形式到达您的应用程序。在逻辑中查看此步骤可能更容易,并再次获取文档的原始流以传递到
StreamSource
,而不是重新序列化文档

充当XML标记流形式的转换源的持有者


Streamsource封装xml标记流。因此,您只需将文档序列化为xml。

我找到了一个解决方案。有一个DOMSource类,它将Document对象作为构造函数参数

/**
 * Convert document to string for display
 * @param doc org.w3c.dom.Document
 * @return String
 */
private String documentToString(org.w3c.dom.Document doc) throws TransformerException {

    // Create dom source for the document
    DOMSource domSource=new DOMSource(doc);

    // Create a string writer
    StringWriter stringWriter=new StringWriter();

    // Create the result stream for the transform
    StreamResult result = new StreamResult(stringWriter);

    // Create a Transformer to serialize the document
    TransformerFactory tFactory =TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    transformer.setOutputProperty("indent","yes");

    // Transform the document to the result stream
    transformer.transform(domSource, result);        
    return stringWriter.toString();
}