通过 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 转换的主要内容,如果未能解决你的问题,请参考以下文章

Linux下每天自动执行查看磁盘剩余空间的shell文件

在 XSLT 中对记录进行分组时如何避免 O(n^2) 复杂性?

XSLT - 在多个文件时选择唯一元素

Linux shell磁盘监控

通过linux的shell脚本批量处理交换机配置变更

Linux shell基础