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

基于xmllint在XML的article标签内匹配reference值并提取节点内容

实现方案

直接用XPath的谓词筛选逻辑即可实现需求,核心思路是先匹配<reference>子节点值等于目标编号的<article>节点,再在该节点范围内提取目标子标签内容,不会跨节点拿到其他article的同名字段。

通用写法模板

对应的xmllint命令格式如下:

xmllint --xpath "string(//article[reference='你的目标reference编号']/要提取的目标子标签路径)" 你的xml文件路径

用法示例

基于你给出的XML样例,可直接参考以下命令:

  • 提取reference编号为10001的article发布日期
xmllint --xpath "string(//article[reference='10001']/publicationDate)" file.xml

执行返回结果:2022-02-13

  • 提取reference编号为10000的article下嵌套在author节点里的作者名
xmllint --xpath "string(//article[reference='10000']/author/name)" file.xml

执行返回结果:Example Name 1

动态传参说明

如果是在shell脚本中动态传入reference编号和目标标签,注意引号嵌套规则即可,参考写法:

#!/bin/bash
# 动态赋值参数
target_ref=10001
target_tag=text
# 执行提取
xmllint --xpath "string(//article[reference='$target_ref']/$target_tag)" file.xml

兼容处理

如果XML中可能存在多个reference编号相同的article节点,建议在筛选条件后加位置下标固定取第一个匹配项,避免返回多值异常:

# 取reference=10000的第一个匹配article的title值
xmllint --xpath "string(//article[reference='10000'][1]/title)" file.xml

语法说明:XPath中跟在节点后方的[筛选条件]是谓词语法,会对前方选中的节点集做过滤,这里[reference='xxx']的作用就是仅保留存在子节点<reference>且其文本值等于指定编号的article节点,后续的子标签查找会自动限定在符合条件的article节点范围内。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:12:22