我需要在java文件中运行此命令行arugment
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代码不行。
错误:'非静态Java函数的第一个参数' insertCallouts'不是有效的对象引用。'
致命错误:'非静态Java函数的第一个参数' insertCallouts'不是有效的对象引用。'
javax.xml.transform.TransformerConfigurationException:非静态Java函数的第一个参数' insertCallouts'不是有效的对象引用。
答案 0 :(得分:0)
你看到的错误来自Xalan,而不是Saxon。
使用JAXP方法<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li class="dropdown">
<a href="#" class="dropdown-toggle">Parent Link</a>
<ul class="dropdown-menu">
<li>
<div class="my-content">
<div class="row">
<ul>
<li><a href="/">dropdown link</a></li>
<li><a href="/">dropdown link</a></li>
<li><a href="/">dropdown link</a></li>
</ul>
</div>
</div>
</li>
</ul>
</li>
非常危险,因为您获得的XSLT处理器完全取决于类路径上的内容。加载您想要的处理器更加安全:例如,如果您想要Saxon Professional Edition,请使用TransformerFactory.newInstance()
。
更好的是,使用Saxon的s9api接口,而不是使用JAXP,它可以让您更好地控制参数传递给转换的方式。
另请注意,该错误与从样式表到外部Java方法的调用有关。它与您的问题的主题无关,即将参数从Java应用程序传递到XSLT代码。