在下面的代码中,我正在使用SAXON
使用XSLT修改XML文件import java.io.File;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
public class SaxonImplementation {
public static void simpleTransform(String sourcePath, String xsltPath,
String resultDir) {
TransformerFactory tFactory = TransformerFactory.newInstance();
try {
Transformer transformer = tFactory
.newTransformer(new StreamSource(new File(xsltPath)));
transformer.transform(new StreamSource(new File(sourcePath)),
new StreamResult(new File(resultDir)));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
simpleTransform("first.xml", "newxsl.xslt", "second.xml");
}
}
现在我想修改一个XML字符串,而不是修改XML文件。我该怎么办? transformer.transform方法需要XML源文件和结果文件。如何提供XML字符串而不是文件,并以Stream的形式获取结果?
答案 0 :(得分:3)
您可以为StreamSource
创建java.io.Reader
,因此将XML字符串包装在StringReader
中,然后包含在StreamSource
中并将其传递给变换器:
String xml = ...
transformer.transform(new StreamSource(new StringReader(xml)), ...
StreamResult
也是如此,您可以使用任意OutputStream
或Writer
来创建StreamResult
。
这适用于任何Trax
实施,不仅适用于Saxon。