0%

使用xmllint处理xml

xmllint是一个命令行xml工具。

格式化

使用--format参数格式化文件。

假设有文件books.xml

1
2
<?xml version="1.0" encoding="UTF-8"?>
<books><book id="1"><book-name>习惯的力量</book-name><authors><author>查尔斯·都希格</author></authors></book><book id="2"><book-name>从0到1</book-name><authors><author>彼得·蒂尔</author><author>布莱克·马斯特斯</author></authors></book></books>

执行命令xmllint --format books.xml,得到如下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1">
<book-name>习惯的力量</book-name>
<authors>
<author>查尔斯·都希格</author>
</authors>
</book>
<book id="2">
<book-name>从0到1</book-name>
<authors>
<author>彼得·蒂尔</author>
<author>布莱克·马斯特斯</author>
</authors>
</book>
</books>

获取节点的值

使用--xpath参数获取节点的值:

1
2
$ xmllint --xpath '//book[@id="1"]/book-name/text()' books.xml
习惯的力量

获取属性的值

使用--xpath参数获取属性的值:

1
2
$ xmllint --xpath '//book/@id' books.xml
id="1" id="2"

验证xml有效性

使用--schema参数验证xml文件的有效性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ xmllite --schema books.xsd books.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1">
<book-name>习惯的力量</book-name>
<authors>
<author>查尔斯·都希格</author>
</authors>
</book>
<book id="2">
<book-name>从0到1</book-name>
<authors>
<author>彼得·蒂尔</author>
<author>布莱克·马斯特斯</author>
</authors>
</book>
</books>
books.xml validates

注意,默认情况下会先输出文件内容,然后给出验证结果。 可以使用--noout参数,这样可以只得到验证结果:

1
2
$ xmllite --schema books.xsd --noout books.xml
books.xml validates