如何 运行 在 java 中进行 saxon xslt 转换
How to run saxon xslt transformation in java
我可以轻松地 运行 在命令行中使用以下命令来转换 xml 文件:
java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt
我想从 java 文件中得到完全相同的结果,这样我就可以在我正在制作的程序中使用它。
我已将 saxon9he.jar 放在构建路径中,但如何在命令行外调用相同的命令?
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt");
参考 javadoc here.
使用@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);
}
}
看起来效果很好。感谢帮助
您最好使用用于 XML 和 XSLT 处理的标准 Java API:java.xml.transform
您需要访问的第一个 class 是 javax.xml.transform.TransformerFactory,您可以使用它来创建一个 Transformer 对象,然后使用它来 运行 您的 XSLT 转换。或者,您可以使用 TransformerFactory 创建一个 Templates 对象(这将导致 Saxon pre-process/compile/etc 您的 XSLT 样式表),然后重复使用 Templates 对象为您的 XSLT 转换创建 Transformer 对象。
为了确保 javax.xml.transform.TransformerFactory class 映射到 Saxon 实现,您可以使用命令行 fiddle 围绕引导 class 路径选项,或使用代码执行相同操作:
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
完成此操作后,对 TransformerFactory.newInstance() 的任何调用都将神奇地创建 Saxon TransformerFactory 实现。使用此方法会更好,因为您将获得标准 Java API 的好处,并且以后可以自由地转移到其他 XSLT 处理器。您可能想研究使用 XSLTC,它是 Apache Xalan 的一部分,因为它对于某些类型的 XSLT 样式表来说速度更快。
文档在这里: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) 它不能很好地与 APIs 集成模式处理和 XPath 评估等相关任务。
s9api API 与 Saxon 在各种任务(包括 XSLT、XQuery、XPath 和 XSD 验证)中的功能更加匹配,但不可移植。
这是你的选择。
我可以轻松地 运行 在命令行中使用以下命令来转换 xml 文件:
java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt
我想从 java 文件中得到完全相同的结果,这样我就可以在我正在制作的程序中使用它。 我已将 saxon9he.jar 放在构建路径中,但如何在命令行外调用相同的命令?
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("java -jar saxon9he.jar -o:outputfile.xml data.xml transform.xslt");
参考 javadoc here.
使用@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);
}
}
看起来效果很好。感谢帮助
您最好使用用于 XML 和 XSLT 处理的标准 Java API:java.xml.transform
您需要访问的第一个 class 是 javax.xml.transform.TransformerFactory,您可以使用它来创建一个 Transformer 对象,然后使用它来 运行 您的 XSLT 转换。或者,您可以使用 TransformerFactory 创建一个 Templates 对象(这将导致 Saxon pre-process/compile/etc 您的 XSLT 样式表),然后重复使用 Templates 对象为您的 XSLT 转换创建 Transformer 对象。
为了确保 javax.xml.transform.TransformerFactory class 映射到 Saxon 实现,您可以使用命令行 fiddle 围绕引导 class 路径选项,或使用代码执行相同操作:
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
完成此操作后,对 TransformerFactory.newInstance() 的任何调用都将神奇地创建 Saxon TransformerFactory 实现。使用此方法会更好,因为您将获得标准 Java API 的好处,并且以后可以自由地转移到其他 XSLT 处理器。您可能想研究使用 XSLTC,它是 Apache Xalan 的一部分,因为它对于某些类型的 XSLT 样式表来说速度更快。
文档在这里: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) 它不能很好地与 APIs 集成模式处理和 XPath 评估等相关任务。
s9api API 与 Saxon 在各种任务(包括 XSLT、XQuery、XPath 和 XSD 验证)中的功能更加匹配,但不可移植。
这是你的选择。