gpt4 book ai didi

java - 如何使用参数在 java 中运行 saxon xslt 转换

转载 作者:行者123 更新时间:2023-11-30 06:15:32 25 4
gpt4 key购买 nike

我需要在 java 文件中运行此命令行参数

java -jar output.docbook -o:output.fo -xsl:third_party\docbook_xsl\1_78_1\fo\docbook_FCRR.xsl axf.extensions=1 use.extensions=1

但是我正在尝试的方法不起作用。这是我到目前为止所拥有的

TransformerFactory tfactory = TransformerFactory.newInstance();

try {
// Create a transformer for the stylesheet.
Transformer transformer =
tfactory.newTransformer(new StreamSource(xslPath));
transformer.setParameter("axf.extensions","1");
transformer.setParameter("use.extensions","1");

// Transform the source XML to System.out.
transformer.transform(new StreamSource("output.docbook"),
new StreamResult(new File("output.fo")));
}catch(TransformerException e){
e.printStackTrace();

}

命令行代码工作正常,但 java 代码却不行。

ERROR: 'The first argument to the non-static Java function 'insertCallouts' is not a valid object reference.'

FATAL ERROR: 'The first argument to the non-static Java function 'insertCallouts' is not a valid object reference.'

javax.xml.transform.TransformerConfigurationException: The first argument to the non-static Java function 'insertCallouts' is not a valid object reference.

最佳答案

您看到的错误来自 Xalan,而不是 Saxon。

使用 JAXP 方法 TransformerFactory.newInstance() 非常危险,因为您获得的 XSLT 处理器完全取决于类路径上的内容。显式加载您想要的处理器要安全得多:例如,如果您想要 Saxon Professional Edition,请使用 new com.saxonica.ProfessionalTransformerFactory()。

更好的是,不要使用 JAXP,而是使用 Saxon 的 s9api 接口(interface),它可以让您更好地控制如何将参数传递给转换。

另请注意,该错误与从样式表到外部 Java 方法的调用有关。它与您的问题主题无关,即将参数从 Java 应用程序传递到 XSLT 代码。

关于java - 如何使用参数在 java 中运行 saxon xslt 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com