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