我也不精通 Java,但我在Saxonica 网站上的 Michael Kay 教程中发现它是可行的。
这是我所做的以及对我来说效果很好的方法:在 XSLT 样式表的根元素中,我为函数分配了一个名称空间(在我的情况下,我使用它来解压缩,所以我将前缀命名为 unzip,但这肯定是任何事物):
xmlns:unzip="java:java.lang.Runtime"
我正在为稍后调用的批处理文件定义一个带有文件路径的变量。然后我正在使用
<xsl:result-document href="{$batchFile}" method="text"> ... </result document>
创建批处理文件。(解压缩当然可以只用一个命令完成,但我发现批处理文件版本更方便,因为我需要将解压缩命令与一些更改目录命令和其他小东西结合起来。此外,使用批处理文件打开了一个世界可以从 XSLT 工作表调用的更复杂的任务。)
当我需要执行批处理文件时,我插入一个 xsl:message,如下所示:
<xsl:message>Executing <xsl:value-of select="unzip:exec(unzip:getRuntime(),concat('cmd /c /y start ',$batchFile))"/></xsl:message>
希望有帮助,最好的问候,凯