用于更新简单 XML 文件的 CLI 命令

用于更新简单 XML 文件的 CLI 命令

我想以编程方式更新一个非常简单的 XML 配置文件中的字符串,例如:

<?xml version="1.0"?>
<x>
    <z>should be changed</z>
</x>
<y>
    <z>should NOT be changed</z>
</y>

是否存在一个简单的 CLI 命令来更新 x/z 而不是 y/z ?也许使用 XPath 选择器参数,例如:

$ xml-update myfile.xml /x/z "my new string"

我可以用 Perl 或 Python 编写一些内容,但考虑到这个问题的简单性,我猜一定有一个聪明的 Unix 实用程序可以做到这一点。

更新:我找到了这个,但似乎有点过头了。而且我必须先学习 XSLT。http://developerblog.redhat.com/2013/12/05/xml-editing-bash-script/

答案1

您可以使用xml2/2xml工具可以在命令行上轻松处理 XML。 将 XML 文档转换为适合与或xml2等传统文本处理工具一起使用的行式格式,然后采用此格式并将其转换回 XML。awksed2xml

举个例子,如果我拿这个文档:

<?xml version="1.0"?>
<doc>
<x>
    <z>should be changed</z>
</x>
<y>
    <z>should NOT be changed</z>
</y>
</doc>

运行xml2该内容可得出:

$ xml2 < doc.xml
/doc/x/z=should be changed
/doc/y/z=should NOT be changed

<z>我可以像这样修改元素的内容

xml2 < doc.xml |
sed '/\/doc\/x\/z/ s/should be changed/look ma no hands/' |
2xml | tidyp -xml -i -q

我使用sed搜索表达式明确查找以 开头的行/doc/y/z,然后修改该行的内容,结果为:

<doc>
  <x>
    <z>look ma no hands</z>
  </x>
  <y>
    <z>should NOT be changed</z>
  </y>
</doc>

我将输出传递给tidypXML 格式化程序,因为否则文档将如下所示:

<doc><x><z>look ma no hands</z></x><y><z>should NOT be changed</z></y></doc>

...从语法上来说是正确的,但是读起来比较困难。

相关内容