Saxon实现数据流

时间:2016-05-18 20:04:48

标签: java xml xslt saxon

在下面的代码中,我正在使用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的形式获取结果?

1 个答案:

答案 0 :(得分:3)

您可以为StreamSource创建java.io.Reader,因此将XML字符串包装在StringReader中,然后包含在StreamSource中并将其传递给变换器:

String xml = ...
transformer.transform(new StreamSource(new StringReader(xml)), ...

StreamResult也是如此,您可以使用任意OutputStreamWriter来创建StreamResult

这适用于任何Trax实施,不仅适用于Saxon。