我想将 XML 文档转换编写为一次性命令和独立脚本,就像我使用 Unix 工具(例如grep
、sed
、awk
等)来操作文本文件一样。脚本必须可在 Linux 和 Windows 之间移植(使用 Cygwin 即可)。
如果您已经定期执行此操作,您使用什么解决方案?你能推荐它吗?
(一些背景:
现在,我想从一组 XML 文档中删除某种元素。我经常需要进行这种系统的 XML 文档重写;有时,在运行中(在命令行上,我经常使用);更多时候,我想构建更复杂的转换,将它们保存到文件中,然后从文件中执行它们。
所以我想要一种可以在命令行上使用的 XML 转换脚本语言。类似于 XML 文档的东西sed
:awk
它的命令将指定一个选择器,用于选择输入文档中的节点,以及一个操作,该操作指定在每个选定节点处对文档进行什么操作。
通常,我会退缩并使用XML::LibXML编写 Perl 脚本。这行得通,但它确实不符合要求:
- 语法上:代码过于冗长,无法在命令行上使用
- 语义上:没有给出“选择和转换”模式,我必须将这种行为明确地编程到我的代码中,所以读者很难理解这是真正发生的事情
- 句法/语义:阅读或编写此代码需要语言流利
使用任何其他通用编程语言也是如此。
嗯,这就是 XSLT 的发明目的,对吧?
也许; 我可以使用 XSLT,但它确实有同样的缺点。
一个更好的匹配是xmlstarlet:它真的很像sed
,因为它支持我想要的类型的简短、神秘的命令。然而,就像使用 sed 一样,由这些命令组成的大型程序很难理解。
另一个想法是使用jQuery DOM 操作:
- 比 XPath 更强大的选择器
- 优雅而紧凑的方式将选择和操作结合起来
- 具有任意 JavaScript 函数的内置可扩展性(但对于简单的情况不需要太多 JavaScript 知识)
太好了,但我需要一个实用程序来允许我将这些表达式用作独立脚本:
jqmanip --html '$(a:parent).detach()' foo.html > bar.html
jqmanip convert-tables-to-divs.jqm foo.html > bar.html
这就是我正在寻找的那种实用程序。)