XML 路径表达式

XML Path expression

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
          <groupId>telnet</groupId>
          <artifactId>telnet.service</artifactId>
          <version>1.10.0-SNAPSHOT</version>
        </dependency>
        <dependency>
          <groupId>xmlthing</groupId>
          <artifactId>xmlthing.service</artifactId>
          <version>1.9.0-SNAPSHOT</version>
        </dependency>
        <dependency>
          <groupId>parser</groupId>
          <artifactId>parser.service</artifactId>
          <version>1.4.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</dependencyManagement>

如何比这更实质? 我在从 groupId=telnet 所在的 version 属性中提取值时遇到问题。如何获取 1.10.0-SNAPSHOT 的 xmlpath 值,其中 groupId=telnet?

抱歉之前没有提及: 它应该是 linux/unix 格式(xmllint、grep、sed ...)任何格式 :) 非常感谢! Brgds, S.

您可以先选择嵌套在 dependency 个元素中的所有 version 个元素:

//pom:dependency/pom:version

然后适当地限定 dependency

//pom:dependency[pom:groupId = 'telnet']/pom:version

当然,您还需要为 XPath 指定命名空间。

快速 PowerShell 测试:

PS> $x | Select-Xml '//pom:dependency[pom:groupId = ''telnet'']/pom:version' -Namespace @{pom = 'http://maven.apache.org/POM/4.0.0'} | % node


#text
-----
1.10.0-SNAPSHOT

我使用 xpath 找到了解决方案:

xpath -q -e "//dependency[groupId='telnet']/version/text()" pom.xml