使用xmlstarlet选择多个元素

问题描述 投票:1回答:2

由于在其他地方找不到解释的示例,因此我将自己的发现作为问答环节分享。

考虑此学生名单(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
2个回答
1
投票

获得此命令是]

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提供了更高级的参数。


    0
    投票

    您也可以在这里使用concat()

    © www.soinside.com 2019 - 2024. All rights reserved.