使用Saxon的XML和XSL文件

时间:2019-01-12 11:02:52

标签: java xml xslt xsd saxon

Xalan的简单性很吸引人,但是 如何使用saxonxml文件从xsl执行this简单转换?

package xalan;

import java.io.File;
import java.io.FileOutputStream;
import java.net.URI;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class XalanTransform {

    public XalanTransform() {
    }

    public void transform(URI xml, URI xsl, URI out) throws Exception {
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer(new StreamSource(new File(xsl)));
        transformer.transform(new StreamSource(new File(xml)), new StreamResult(new FileOutputStream(new File(out))));
    }

}

从字面上讲,这并不简单,我很高兴能够处理文件。我对saxon中的CLI做了一些类似的操作,但是可能忽略了类似的文档,对于上述saxon的{​​{1}},文件是在运行时加载的,时间。

1 个答案:

答案 0 :(得分:2)

您使用的API是JAXP,并且由Saxon和Xalan支持:您只需要确保Saxon的TransformerFactory实现在类路径上即可。

的确,此API很简单,但出于某些目的,它太简单了。例如:

  • 它不支持XSLT 2.0和3.0功能,例如模式识别,流式传输,多个输出文档

  • 不允许参数与所有数据类型一起提供

  • 它没有提供任何方式来提供相同的文档作为多个转换的输入(您可以尝试以DOM的形式提供它,但这与XSLT的匹配度很差,甚至也不是线程安全的)

由于这些原因,Saxon还提供了自己的API,称为s9api。做一些非常简单的事情要复杂一些,但是它要更全面,更强大。