[英]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.