由于在其他地方找不到解释的示例,因此我将自己的发现作为问答环节分享。
考虑此学生名单(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>
我如何选择每个学生的两个子属性来获得像这样的列表:
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
定义一个template-m "//pupil"
matches每个pupil
节点-v "firstName"
prints>] firstName
子节点(当前匹配节点的子节点)的值-o " "
打印-v "lastName"
(请参见上文)-n
打印换行pupils.xml
提供输入文件The documentation提供了更高级的参数。
您也可以在这里使用concat()
: