操纵工具
XMLStarlet
可以用 xmlstarlet 命令从命令行中修改 XML 文件。也是在修改 libvirt 的域定义文件时遇到的需求,那时候我有一堆的 XML 文件要修改……
对于如下 XML 内容:
<root>
<node user="user1">
<tag k="name" v="name1"/>
</node>
<node user="user2">
<tag k="network" v="nw1"/>
</node>
<node user="user3">
<tag k="foo" v="bar"/>
</node>
</root>
如果向删除第一个<node>节点:
<node user="user1"> <tag k="name" v="name1"/> </node>
可以执行xmlstarlet ed -d '//root/node[tag[@v="name1"]]' /path/to/file.xml命令,修改后的内容会写入标准输出。如果想写入文件,可以使用-L, --inplace选项,即xmlstarlet ed -L -d '//root/node[tag[@v="name1"]]' /path/to/file.xml命令。
参考文献
Remove XML Nodes using Unix Command Line
Start working with XMLStarlet
xsltproc
这个也可以,不过好像挺复杂的,没深入研究。
参考文献
Edit xml file using shell script / command