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
<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