我想以编程方式更新一个非常简单的XMLconfiguration文件中的string,如下所示:
<?xml version="1.0"?> <x> <z>should be changed</z> </x> <y> <z>should NOT be changed</z> </y>
有一个简单的CLI命令会更新x / z和NOT y / z吗? 也许使用XPathselect器参数,例如:
$ xml-update myfile.xml /x/z "my new string"
我可以用Perl或Python编写一些东西,但考虑到这个问题的简单性,我想必须有一个聪明的Unix工具来做到这一点。
更新 :我发现这个,但似乎有点矫枉过正。 我必须先学习XSLT。 http://developerblog.redhat.com/2013/12/05/xml-editing-bash-script/
您可以使用xml2 / 2xml工具在命令行上处理XML,而不用大惊小怪。 xml2将XML文档转换为适用于传统文本处理工具(如awk或sed的面向行的格式,而2xml采用此格式并将其转换回XML。
举个例子,如果我拿这个文件:
<?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
我正在使用sedsearchexpression式来明确查找以/doc/y/z开头的行,然后修改该行的内容,从而使我们可以:
<doc> <x> <z>look ma no hands</z> </x> <y> <z>should NOT be changed</z> </y> </doc>
我通过tidyp (一个XML格式化程序)传递了输出,因为否则文档将如下所示:
<doc><x><z>look ma no hands</z></x><y><z>should NOT be changed</z></y></doc>
…这是句法正确,但更难以阅读。