数据流的 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也是如此,您可以使用任何OutputStreamWriter来创建StreamResult

这适用于任何 Trax 实施,而不仅仅是撒克逊人。