如何使用参数在 java 中运行撒克逊 xslt 转换



>我需要在java文件中运行这个命令行arugment

java -jar output.docbook -o:output.fo -xsl:third_partydocbook_xsl1_78_1fodocbook_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 代码不能。

错误:"非静态 Java 函数 'insertCallouts' 的第一个参数不是有效的对象引用。

致命错误:"非静态 Java 函数 'insertCallouts' 的第一个参数不是有效的对象引用。

javax.xml.transform.TransformerConfigurationException:非静态 Java 函数 'insertCallouts' 的第一个参数不是有效的对象引用。

你看到的错误来自Xalan,而不是来自撒克逊。

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

更好的是,与其使用 JAXP,不如使用 Saxon 的 s9api 接口,该接口使您可以更好地控制如何将参数传递给转换。

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

相关内容

  • 没有找到相关文章

最新更新