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

如何用XPath 1.0获取pom.xml中名称含点的标签值?

用XPath 1.0获取pom.xml中含点的元素值

要从带命名空间的pom.xml里提取名称包含点的元素值,需要注意两个核心问题:pom.xml默认带maven命名空间(http://maven.apache.org/POM/4.0.0),且XPath里的点是特殊字符(表示当前节点轴),直接写sonar.exclusions这类名称会触发语法错误,以下是两种可行方案:

方案1:用local-name()匹配元素名(无需绑定命名空间前缀)

通过local-name()直接匹配元素的本地名称(忽略命名空间),写法简单直观:

  • 获取<sonar.exclusions>的值:
    //*[local-name()='properties']/*[local-name()='sonar.exclusions']/text()
    
  • 获取<jacoco.line.min.coverage>的值:
    //*[local-name()='properties']/*[local-name()='jacoco.line.min.coverage']/text()
    
  • 获取<jacoco.complexity.min.coverage>的值:
    //*[local-name()='properties']/*[local-name()='jacoco.complexity.min.coverage']/text()
    

方案2:绑定命名空间前缀(更规范的写法)

如果需要严格遵循命名空间规则,可先将maven的命名空间绑定一个前缀(比如m),再用带引号的元素名(避免点被解析为特殊符号)查询:

以绑定前缀m为例,对应的XPath语句:

  • 获取<sonar.exclusions>的值:
    //m:properties/m:'sonar.exclusions'/text()
    
  • 获取<jacoco.line.min.coverage>的值:
    //m:properties/m:'jacoco.line.min.coverage'/text()
    
  • 获取<jacoco.complexity.min.coverage>的值:
    //m:properties/m:'jacoco.complexity.min.coverage'/text()
    

注:不同工具绑定命名空间的方式不同,比如在xmllint中可执行:xmllint --xpath "//m:properties/m:'sonar.exclusions'/text()" --namespace "m=http://maven.apache.org/POM/4.0.0" pom.xml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:15:09