通过Linux shell进行XSLT 2.0转换

17

我想通过命令行执行来执行XSLT 2.0转换。我听说我可以使用Saxon库通过像shell命令这样的方式:

java -jar sax.jar -input foo.xml -xsl foo.xsl -output bar.xml

有人知道我如何实现这个目标吗?

顺便说一下,我不限于使用Java。任何其他的shell解决方案都可以。


3
请注意,Sax解析器不执行XSLT转换。Sax解析器会以流的形式解析XML并触发事件。Saxon是一种XSLT处理器。大多数情况下,XSLT处理器不支持流式处理。Saxon(在其商业版本中)使用XSLT 3.0提供的最新指令具有流式处理的能力。 - Vincent Biragnet
感谢澄清正确的命名。 - Alp
2个回答

14

3
非常感谢。我还发现这个网址:http://manpages.ubuntu.com/manpages/oneiric/man1/saxonb-xslt.1.html,您认为这个网址也可以吗?或者您有其他更好的选择? - Alp
1
你的Ubuntu发行版附带的Saxon版本可能相当老旧。最好下载最新版本(尽管如果你是初学者,你可能不会注意到太多差异)。 - Michael Kay

3

更新:如果您的Java版本为11或更高版本,则请检查解决方案2和3,其中.internal.不再可用。

我刚刚编写了this bash script,使用com.sun.org.apache.xalan.internal.xsltc.cmdline类来转换XML。在openjdk上运行良好。虽然不适合生产用例,但对于调试很有用。

P.S.从this blog得到了灵感


看起来,就像所有的.internal.东西一样,它会在一段时间后消失...所以你的bash脚本最终会在JDK 11中出现ClassNotFoundException。 - Ondra Žižka
@OndraŽižka,你是对的。我已经用另一种解决方案更新了答案。你认为Java停止嵌入XSLT还是我们再也无法访问它了? - akostadinov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接