xmlstarlet toolkit 脚本操作xml的好工具, 用法心得

在linux终端或者secureCRT ssh上去,或者是shell脚本可以直接调用xmlstarlet命令操作,解析xml很方便,由于是工作上用到的东东,查了相关的资料,也遇到过一些问题,所以在解决后记录备忘,这里只列出一些常用的命令和一些文档里没有提到的命令,如需文档,请参考:http://xmlstar.sourceforge.net/doc/UG/xmlstarlet-ug.html

例子的测试xml文件都以test.xml为准:

test.xml文件内容如下:

<root>

<aaa>he peng</aaa>

<bbb>zhang ling

</bbb>

<aaa>multiple</aaa>

</root>


1.下载

下载地址:http://xmlstar.sourceforge.net/

随便下载一个版本,这个xmlstarlet是用c语言实现的,需要依赖libxml库,所以,如果你的libxml版本太低了,那就下载一个版本低的xmlstar先练练手吧


2.安装

解压后

sudo ./configure

sudo ./make

sudo ./make install


3.操作方法之转换结点

example 1:(注:有些系统安装好xmlstarlet命令后使用的命令名可能叫xmlstarlet,而不是例子中的xml命令)

xml el test.xml

输出:

root

root/aaa

root/bbb

root/aaa

(注:xml命令只是把处理结果输出到控制台,并不直接改变原来文件的任何地方)

example2:唯一结点(unique)

xml el -u test.xml

输出:

root
root/aaa
root/bbb

4.操作方法之查询结点值

语法:xml sel <global-options> {<template>} [ <xml-file> ... ]

example1:

xml sel -t -v /root/bbb test.xml #-t表示使用模板,-v就是模板参数,表示取路径的值即value of

输出:

zhang ling

(注:zhang ling后有一个空行,可见该语句是把<bbb>和</bbb>之间的值完整的输出,
-v指定的结点路径一定要以"/"开头,不要然不同的机器可能执行不成功,之后的结点路径都是这样

example2:(输出第二个aaa的值)

xml set -t -v /root/aaa[2] test.xml

输出:

multiple

(注:如果有重复的相同结点,如果有属性可以区分,可以指定属性,如:/root/aaa[@name],表示/root/aaa结点,属性为name,当然例子没有属性,所以我们使用数字,使用数字的方法是同事无意中试出来的哦!文档我找了很久都没找到,这也因为这个问题出现在工作中,所以研究了一阵)

5.操作方法之更新结点值

语法:xml ed <global-options> {<action>} [ <xml-file-or-uri> ... ]

example1:(更改指定结点的值)

xml ed -u /root/bbb -v 123 test.xml #-u 是update  -v 是value

输出:

<?xml version="1.0"?>
<root>
  <aaa>he peng</aaa>
  <bbb>123</bbb>
  <aaa>multiple</aaa>
</root>
(注:不但更新了值,还格式化了输出,还加了xml头)

example2:(更新多结点的值)

xml ed -u /root/aaa -v 123 test.xml

输出:

<?xml version="1.0"?>
<root>
  <aaa>123</aaa>
  <bbb>zhang ling
</bbb>
  <aaa>123</aaa>
</root>

这样就把所有的/root/aaa改了

example3:(更新多结点的某一个的值)

xml ed -u /root/aaa[2] -v 123 test.xml

输出:

<?xml version="1.0"?>
<root>
  <aaa>he peng</aaa>
  <bbb>zhang ling
</bbb>
  <aaa>123</aaa>
</root>

example4:(删除多结点的某一个)

xml ed -d /root/aaa[2] test.xml # -d 是delete

输出:

<?xml version="1.0"?>
<root>
  <aaa>he peng</aaa>
  <bbb>zhang ling
</bbb>
</root>

6.操作方法验证有效性

xml val test.xml

输出:

test.xml - valid

表明有效,是符合语法的xml形式

你可能感兴趣的:(xmlstarlet toolkit 脚本操作xml的好工具, 用法心得)