通过 linux shell 进行 XSLT 2.0 转换
Posted
技术标签:
【中文标题】通过 linux shell 进行 XSLT 2.0 转换【英文标题】:XSLT 2.0 transformation via linux shell 【发布时间】:2012-01-22 02:02:18 【问题描述】:我想通过使用命令行执行来执行 XSLT 2.0 转换。我听说我可以通过 java -jar sax.jar -input foo.xml -xsl foo.xsl -output bar.xml
之类的 shell 命令来使用 Saxon 库。有谁知道我如何才能实现这个目标?
顺便说一句,我不限于 Java。任何其他 shell 解决方案都可以。
【问题讨论】:
请注意,Sax 解析器不执行 XSLT。 Sax 解析器在流中解析 XML 并触发事件。 Saxon 是一个 XSLT 处理器。大多数情况下,XSLT 处理器不会流式传输。 Saxon(在他的商业版本中)具有流式传输功能,具有 XSLT 3.0 提供的最新指令。 感谢澄清正确命名 【参考方案1】:更新:如果您的 java 版本为 11 或更高版本,请检查解决方案 2 和 3,其中 .internal.
不再可用。
我刚刚写了this bash script 来使用 com.sun.org.apache.xalan.internal.xsltc.cmdline 类来转换 XML。与openjdk一起工作就好了。不是生产用例的解决方案,但便于调试。
附:灵感来自this blog
解决方案 2:使用xalan command line 解决方案 3:https://github.com/physikerwelt/xstlprocJ【讨论】:
看起来,就像所有.internal.
的东西一样,它会在一段时间后消失......所以你的 bash 脚本以 JDK 11 的 ClassNotFoundException 结束
@OndraŽižka,你是对的。我已经用另一种解决方案更新了答案。您认为 Java 停止嵌入 XSLT 还是我们无法再访问它?【参考方案2】:
撒克逊人的文档在线:http://www.saxonica.com/documentation/#!using-xsl/commandline。所以你需要java -jar saxon9he.jar -xsl:foo.xsl -s:foo.xml -o:bar.xml
。
【讨论】:
非常感谢。我还发现了这个:manpages.ubuntu.com/manpages/oneiric/man1/saxonb-xslt.1.html 也很好,或者你更喜欢什么? 您的 Ubuntu 发行版附带的 Saxon 版本可能相当旧。下载最新版本可能会更好(尽管如果您是初学者,您可能不会注意到太大差异)。以上是关于通过 linux shell 进行 XSLT 2.0 转换的主要内容,如果未能解决你的问题,请参考以下文章