2017-10-02 8 views
1
<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> 

XML 경로 표현

방법이보다 실질적인 할 수? version 특성에서 값을 추출하는 데 문제가 있습니다. 여기서 groupId=telnet입니다. xmlpath 값을 1.10.0-SNAPSHOT으로 어떻게 얻을 수 있습니까? groupId=telnet?

죄송합니다. 이전에 죄송합니다. 리눅스/유닉스 형식이어야합니다 (xmllint, grep, sed ...) anything :) 고마워요! Brgds, S.는

답변

1
당신은 dependency 요소에 중첩 된 모든 version 요소를 선택하여 시작할 수 있습니다

: 적절한 자격을 갖추 dependency을 다음

//pom:dependency/pom:version 

과 : 물론

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

내가 사용하는 솔루션을 찾는 XPath는 :

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