如何用xmllint提取XML属性的纯值而非带属性名的结果?
使用xmllint --xpath直接提取XML属性的纯值(支持单/双引号)
不用依赖awk等后续文本处理工具,直接通过XPath的string()函数就能让xmllint返回属性的纯值,完美兼容单引号和双引号包裹的属性:
核心命令
xmllint --xpath 'string(//@team)' your_file.xml
说明
- 把
//@team替换成你实际需要提取的属性的XPath路径://表示匹配文档中所有符合的节点,@team表示选取名为team的属性;如果需要更精准的匹配(比如指定父节点),可以写成//project/@team之类的路径。 string()函数会直接返回属性的原始内容,不会包含包裹属性的单引号或双引号,完全满足你要纯值的需求。
示例验证
假设你的XML内容如下:
<root> <project team="team_abc" /> <project team='team_def' /> </root>
执行命令后会分别返回:
- 提取第一个属性:
xmllint --xpath 'string(//project[1]/@team)' test.xml→team_abc - 提取第二个属性:
xmllint --xpath 'string(//project[2]/@team)' test.xml→team_def
这种方案完全由xmllint原生处理,避免了后续文本解析的潜在问题(比如属性值中包含引号的极端情况),比awk的临时处理更健壮优雅。
内容的提问来源于stack exchange,提问作者Will1v
相关产品推荐
相关产品推荐

