数据流的 Saxon 实现
Saxon implementation for Stream of data
在我下面的代码中,我正在使用 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 的形式获取结果?
您可以为 java.io.Reader
创建一个 StreamSource
,因此将 XML 字符串包装在 StringReader
中,然后包装在 StreamSource
中并将其传递给变压器:
String xml = ...
transformer.transform(new StreamSource(new StringReader(xml)), ...
StreamResult
也是如此,您可以使用任何OutputStream
或Writer
来创建StreamResult
。
这适用于任何 Trax
实施,而不仅仅是撒克逊人。
在我下面的代码中,我正在使用 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 的形式获取结果?
您可以为 java.io.Reader
创建一个 StreamSource
,因此将 XML 字符串包装在 StringReader
中,然后包装在 StreamSource
中并将其传递给变压器:
String xml = ...
transformer.transform(new StreamSource(new StringReader(xml)), ...
StreamResult
也是如此,您可以使用任何OutputStream
或Writer
来创建StreamResult
。
这适用于任何 Trax
实施,而不仅仅是撒克逊人。