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

如何使用xmlstarlet从Maven settings.xml中获取指定id的server对应的username值

如何使用xmlstarlet从Maven settings.xml中获取指定id的server对应的username值

我完全懂你的 frustration——你明明在XPath测试工具里写出了正确的表达式,但换到xmlstarlet上就失效了,问题其实出在Maven settings.xml自带的默认命名空间上!

你的settings.xml开头有xmlns="http://maven.apache.org/SETTINGS/1.0.0"这个属性,这意味着所有元素都隶属于这个命名空间,直接用不带前缀的XPath是找不到对应节点的。下面是能直接生效的xmlstarlet命令:

xmlstarlet sel -N x="http://maven.apache.org/SETTINGS/1.0.0" -t -v "/x:settings/x:servers/x:server[x:id='fake']/x:username" settings.xml

我给你拆解下关键参数的作用:

  • -N x="http://maven.apache.org/SETTINGS/1.0.0":给默认命名空间绑定一个简短前缀x,这样我们就能在XPath里用这个前缀定位所有元素
  • -t:告诉xmlstarlet进入模板处理模式
  • -v:指定输出匹配节点的文本内容
  • 最后的XPath路径用x:修饰每个元素,确保能精准匹配到命名空间下的目标节点

执行这个命令后,就能输出你想要的username2了。

如果不想显式绑定命名空间,也可以用local-name()来匹配元素名称,只是可读性会差一些:

xmlstarlet sel -t -v "/*[local-name()='settings']/*[local-name()='servers']/*[local-name()='server'][*[local-name()='id']='fake']/*[local-name()='username']" settings.xml

备注:内容来源于stack exchange,提问作者Wojciech Sciesinski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:47:35