对于XSLT转换,我需要一个 javax.xml.transform.stream.StreamSource 对象来表示正在转换的xml文件。我只有 org.w3c.dom.Document 类型的对象。如何将Document转换为StreamSource?
答案 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 readers和writers以实现相同的目标(这是由于需要管理线程而导致的痛苦,但如果临时转储整个文档,这是不可避免的。)
另一种方法可能是首先查看Document
来自哪里。无论如何,它有可能以某种流的方式到达您的应用程序。 可能更容易在逻辑中查看此步骤,并再次获取文档的原始流以传入StreamSource
,而不是重新序列化文档。
答案 2 :(得分:0)
以XML标记流的形式充当转换源的持有者。
Streamsource包装了一个xml令牌流。因此,您只需将文档序列化到xml。