You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xmlstarlet按属性而非元素匹配解析XML结果重复问题求解

问题根因

你编写的xmlstarlet命令出现笛卡尔积重复输出,核心问题出在第三层匹配的路径规则:

  • 多层-m(匹配)参数嵌套时,内层匹配如果使用//开头的全局路径,会忽略外层已匹配到的节点上下文,全局扫描所有符合路径的节点。你第三层写的//views/view/viewInitiators/viewInitiator会在每次遍历到任意view节点时,拉取所有view下的全部initiator节点做拼接,自然就出现了跨view的重复组合。
  • 内层匹配默认支持相对路径,即相对于外层已匹配的当前节点的层级路径,你可以用这个特性限定只取当前view下的initiator节点。

修正后的命令

xmlstarlet sel -t \
                -m //cluster \
                        --var sn=@top-level-assembly \
                -m //views/view \
                        --var view=@name \
                -m viewInitiators/viewInitiator \
                        -v 'concat($sn,"-",$view,",",@id)' -n test.xml

输出结果

运行修正后的命令会直接得到你期望的输出:

XYZ12312312312-ABC,ABCi1
XYZ12312312312-ABC,ABCi2
XYZ12312312312-DEF,DEFi1
XYZ12312312312-DEF,DEFi2

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:45:00