通过已知name元素值查找XML中result父元素的id属性
没问题,我来帮你搞定这个XML查询需求!针对你给出的XML结构,下面分别用xmllint和xmlstarlet两种工具来实现通过<name>值查找对应<result>的id属性:
方法一:使用xmllint工具
xmllint自带XPath查询支持,非常适合这类精准匹配场景。假设你的XML内容保存在data.xml文件中,要查找name为Test1对应的result的id,可以执行以下命令:
xmllint --xpath 'string(//result[name="Test1"]/@id)' data.xml
命令解释:
//result:从XML文档中匹配所有<result>元素[name="Test1"]:筛选出子元素<name>的值恰好为Test1的<result>元素@id:获取该<result>元素的id属性string():将查询到的属性节点转换为纯字符串输出(避免输出XML格式的节点内容)
如果需要查找其他name值,只需要把命令中的Test1替换成目标值(比如Test2、Test3)即可。
小提示:如果你的原始XML没有单个根节点(虽然你给出的结构有<details>作为根),可以临时包裹一个根节点来避免xmllint报错,命令示例:
echo "<root>$(cat data.xml)</root>" | xmllint --xpath 'string(//result[name="Test1"]/@id)' -
方法二:使用xmlstarlet工具
xmlstarlet的查询语法更简洁直观,同样支持XPath。查找Test1对应id的命令如下:
xmlstarlet sel -t -v '//result[name="Test1"]/@id' data.xml
命令解释:
sel:xmlstarlet的查询(select)子命令-t:指定要使用的模板-v:输出指定XPath匹配到的节点的值- XPath部分的逻辑和xmllint的例子完全一致,替换
Test1就能查询其他name对应的id
内容的提问来源于stack exchange,提问作者MathewS
相关产品推荐
相关产品推荐

