Select 多个元素与 xmlstarlet
Select multiple elements with xmlstarlet
由于我在其他地方找不到解释过的例子,所以我以问答的形式分享我的发现。
考虑这份学生名单 (pupils.xml
):
<pupils>
<pupil>
<firstName>Adam</firstName>
<lastName>Amith</lastName>
<birthDate>2000-01-01</birthDate>
</pupil>
<pupil>
<firstName>Berta</firstName>
<lastName>Bmith</lastName>
<birthDate>2000-01-02</birthDate>
</pupil>
<pupil>
<firstName>Caesar</firstName>
<lastName>Cmith</lastName>
<birthDate>2000-01-03</birthDate>
</pupil>
<pupil>
<firstName>Doris</firstName>
<lastName>Dmith</lastName>
<birthDate>2000-01-04</birthDate>
</pupil>
</pupils>
我怎样才能 select 每个学生的两个子属性得到这样的列表:
Adam Amith
Berta Bmith
Caesar Cmith
Doris Dmith
获取这个的命令是
xmlstarlet select -T -t -m "//pupil" -v "firstName" -o " " -v "lastName" -n pupils.xml
并带来:
Adam Amith
Berta Bmith
Caesar Cmith
Doris Dmith
-T
将输出切换为 text
-t -m "//pupil" -v "firstName" -o " " -v "lastName" -n
定义了一个模板
-m "//pupil"
匹配 每个 pupil
节点
-v "firstName"
打印 firstName
子节点的值(当前匹配节点的子节点)
-o " "
打印空白
-v "lastName"
(见上文)
-n
打印一个 newline
pupils.xml
提供输入文件
The documentation 提供更高级的参数。
您也可以在这里使用concat()
:
xmlstarlet sel -T -t -m //pupil -v "concat(.//firstName ,' ',.//lastName)" -n pupils.xml
具有相同的输出。
由于我在其他地方找不到解释过的例子,所以我以问答的形式分享我的发现。
考虑这份学生名单 (pupils.xml
):
<pupils>
<pupil>
<firstName>Adam</firstName>
<lastName>Amith</lastName>
<birthDate>2000-01-01</birthDate>
</pupil>
<pupil>
<firstName>Berta</firstName>
<lastName>Bmith</lastName>
<birthDate>2000-01-02</birthDate>
</pupil>
<pupil>
<firstName>Caesar</firstName>
<lastName>Cmith</lastName>
<birthDate>2000-01-03</birthDate>
</pupil>
<pupil>
<firstName>Doris</firstName>
<lastName>Dmith</lastName>
<birthDate>2000-01-04</birthDate>
</pupil>
</pupils>
我怎样才能 select 每个学生的两个子属性得到这样的列表:
Adam Amith
Berta Bmith
Caesar Cmith
Doris Dmith
获取这个的命令是
xmlstarlet select -T -t -m "//pupil" -v "firstName" -o " " -v "lastName" -n pupils.xml
并带来:
Adam Amith
Berta Bmith
Caesar Cmith
Doris Dmith
-T
将输出切换为text
-t -m "//pupil" -v "firstName" -o " " -v "lastName" -n
定义了一个模板-m "//pupil"
匹配 每个pupil
节点-v "firstName"
打印firstName
子节点的值(当前匹配节点的子节点)-o " "
打印空白-v "lastName"
(见上文)-n
打印一个 newline
pupils.xml
提供输入文件
The documentation 提供更高级的参数。
您也可以在这里使用concat()
:
xmlstarlet sel -T -t -m //pupil -v "concat(.//firstName ,' ',.//lastName)" -n pupils.xml
具有相同的输出。