首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xmlstarlet选择多个元素

使用xmlstarlet选择多个元素
EN

Stack Overflow用户
提问于 2020-05-20 11:27:54
回答 2查看 113关注 0票数 2

由于我在其他地方找不到解释的例子,所以我把我的发现作为问答分享。

考虑一下这份学生名单(pupils.xml):

代码语言:javascript
复制
<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>

如何选择每个学生的两个子属性来获得如下列表:

代码语言:javascript
复制
Adam Amith
Berta Bmith
Caesar Cmith
Doris Dmith
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-20 11:27:54

获取此命令的命令是

代码语言:javascript
复制
xmlstarlet select -T -t -m "//pupil" -v "firstName" -o " " -v "lastName" -n pupils.xml

并带来:

代码语言:javascript
复制
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打印换行符

  • pupils.xml提供输入文件

文献资料提供了更高级的参数。

票数 3
EN

Stack Overflow用户

发布于 2020-05-20 16:44:51

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

代码语言:javascript
复制
xmlstarlet sel -T -t -m //pupil -v "concat(.//firstName ,' ',.//lastName)" -n pupils.xml

以同样的输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61911918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档