You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用xmlstarlet筛选XML并按priority排序,返回label元素值?

解决XMLStarlet筛选排序问题

原命令的问题分析

你的命令存在两处关键错误:

  • 节点匹配逻辑错误
    • //*匹配所有节点范围太宽泛,应该明确指定//item定位目标节点
    • 筛选Workflow条件时,param='Workflow 1'没有限定paramname属性,正确写法应为param[@name='workflow']='Workflow 1'
  • 排序参数格式错误-s A:N:-中的多余冒号和减号不符合语法,XMLStarlet排序参数格式为-s <排序方向>:<排序类型> <XPATH>,其中:
    • 排序方向:A=升序,D=降序
    • 排序类型:N=数值排序,T=文本排序

正确命令

xmlstarlet sel -t -m "//item[enabled='true' and param[@name='workflow']='Workflow 1']" -s A:N "param[@name='priority']" -v "param[@name='label']" -n file.xml

命令解释

  1. -m "//item[enabled='true' and param[@name='workflow']='Workflow 1']":精准筛选出enabledtrueworkflow参数值为Workflow 1item节点
  2. -s A:N "param[@name='priority']":按priority参数的数值进行升序排序,对应你需要的Item CItem BItem A的输出顺序
  3. -v "param[@name='label']" -n:输出每个匹配节点的label参数值,并自动换行

执行结果

运行命令后将输出:

Item C
Item B
Item A

内容的提问来源于stack exchange,提问作者johnwangel

火山引擎 最新活动