我编写了一个使用 JAXB 进行 XSL 转换的 Java 应用程序。我在类路径中包含了 saxon9.jar,这样我就可以在命令行上使用 XSLT 2.0 而不是 XSLT 1.0。
java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
我在我的 XSL 中包含了代码来报告使用的 XSLT。
<xsl:comment><xsl:text >
</xsl:text>XSLT Version: <xsl:value-of select="system-property('xsl:version')" /> <xsl:text >
</xsl:text>XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> <xsl:text >
</xsl:text>XSLT Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /> <xsl:text >
</xsl:text></xsl:comment>
它报告。
XSLT Version: 1.0
XSLT Vendor: Apache Software Foundation (Xalan XSLTC)
XSLT Vendor URL: http://xml.apache.org/xalan-j
这是作为 JVM 一部分的默认实现。
如何让它使用我指定的撒克逊语?
跟进:
所以这些方法都不起作用(除了将 saxon jar 放在 endorsed 目录中),但它们都应该起作用。似乎我使用“-jar myApp.jar”和想要替代 XSLT 实现的组合是不兼容的。换句话说...
java -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ -jar myApp.jar
...不起作用,但这确实...
java -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp
...有趣的是,我什至不必指定工厂,我得到了撒克逊版本...
java -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp