繁体   English   中英

如何在java中运行撒克逊xslt转换

[英]How to run saxon xslt transformation in java

我可以轻松地在命令行中运行以下命令来转换 xml 文件:

java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt

我想从一个 java 文件中得到完全相同的结果,这样我就可以在我正在制作的程序的一部分中使用它。 我已将 saxon9he.jar 放在构建路径中,但如何在命令行之外调用相同的命令?

文档在这里: http : //www.saxonica.com/documentation/index.html#!using- xsl/ embedding

Saxon 提供了两种用于从 Java 应用程序运行 XSLT 转换的 API:JAXP API 和 s9api API。 JAXP 是几乎所有 Java XSLT 处理器都提供的标准接口,因此,如果您希望应用程序具有可移植性,就可以使用这个接口; 它的缺点是 (a) 它非常面向 XSLT 1.0,这使得很难利用 XSLT 2.0 和 XSLT 3.0 中的新功能,以及 (b) 它没有与 API 很好地集成相关任务,例如模式处理和 XPath 评估。

s9api API 与 Saxon 在各种任务(包括 XSLT、XQuery、XPath 和 XSD 验证)中的功能更加匹配,但不可移植。

这是你的选择。

最好使用用于 XML 和 XSLT 处理的标准 Java API:java.xml.transform

您需要访问的第一个类是 javax.xml.transform.TransformerFactory,您可以使用它来创建一个 Transformer 对象,然后您可以使用它来运行您的 XSLT 转换。 或者,您可以使用 TransformerFactory 创建一个 Templates 对象(这将导致 Saxon 预处理/编译/等您的 XSLT 样式表),然后重复使用 Templates 对象为您的 XSLT 转换创建 Transformer 对象。

为了确保 javax.xml.transform.TransformerFactory 类映射到 Saxon 实现,您可以使用命令行选项修改引导类路径,或者使用代码来执行相同的操作:

System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

完成此操作后,对 TransformerFactory.newInstance() 的任何调用都将神奇地创建 Saxon TransformerFactory 实现。 您最好使用此方法,因为您将获得标准 Java API 的好处,并且您可以在以后自由地转移到其他 XSLT 处理器。 您可能想考虑使用 XSLTC,它是 Apache Xalan 的一部分,因为它对于某些类型的 XSLT 样式表更快。

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt");

在此处参考 javadoc。

使用@Martin Honnen 所说的,我得到了:

import net.sf.saxon.Transform;

class XSLTransform{
    public static void main(String args[]) throws Exception {

        String[] arglist = {"-o:outputfile.xml","data.xml", "transform.xslt"};

        Transform.main(arglist);

    }
}

似乎工作得很好。 谢谢您的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM