我有一个生产流程,在完成之前,它会在大约4个步骤中结合使用XSLT和一些shell脚本。我现在手动执行每个步骤。
我在Linux中使用命令行中的Saxon 9。我可以使用xsl的执行shell脚本而不是我吗?
(我知道我可以通过Ant或Make以另一种方式实现所需的结果..但是如果不是这么做的话,我宁愿留在XSLT中)
更新:我已经使用Xproc最小化了我的shell脚本并加快了速度。我对结果并不完全满意,但Xproc改善了生活。凯的建议看起来不错......但我还没有尝试过。
答案 0 :(得分:5)
我也不是Java精明,但我发现Michael Kay的教程在Saxonica website上是可行的。
这就是我做的以及对我有用的东西: 在XSLT样式表的根元素中,我为函数指定了一个命名空间(在我的情况下,我使用它进行解压缩,所以我将前缀命名为unzip,但这当然可以是任何东西):
xmlns:unzip="java:java.lang.Runtime"
我正在定义一个带有文件路径的变量,以便稍后调用批处理文件。然后我正在使用
<xsl:result-document href="{$batchFile}" method="text"> ... </result document>
创建批处理文件。 (解压缩当然只需要一个命令,但我发现批处理文件版本更方便,因为我需要将unzip-command与一些更改目录命令和其他一些小东西结合起来。而且使用批处理文件打开了一个世界可以从XSLT表调用更复杂的任务。)
当我需要执行批处理文件时,我会插入一条xsl:消息,如下所示:
<xsl:message>Executing <xsl:value-of select="unzip:exec(unzip:getRuntime(),concat('cmd /c /y start ',$batchFile))"/></xsl:message>
希望有所帮助, 最好的祝福, 启
答案 1 :(得分:2)
您可以像调用任何其他外部Java函数一样调用java.lang.Runtime.exec()。