操纵工具
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