java - Document to StreamSource转换

时间:2011-01-18 09:31:35

标签: java dom xslt

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

3 个答案:

答案 0 :(得分:8)

我找到了web page的解决方案。有一个 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();
}

答案 1 :(得分:1)

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

如果文档很小,最简单的方法可能只是将其转换为字符串,在此上创建StringReader并将该读取器传递给StreamSource构造函数。如果文档较大(或者未知大小),以便序列化它可能需要太多内存,那么您将不得不创建piped readerswriters以实现相同的目标(这是由于需要管理线程而导致的痛苦,但如果临时转储整个文档,这是不可避免的。)

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

答案 2 :(得分:0)

  

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

Streamsource包装了一个xml令牌流。因此,您只需将文档序列化到xml。