2012-06-20 55 views
1

我正在處理pom文件修改以更改版本節點值。我可以通過xpath來修改所有版本節點,但我只希望它在artifactId和分類器匹配某些值時更改版本節點。這裏是我的xml:如何讓XPATH返回兩個不同兄弟姐妹之間的節點?

<artifactItem> 
    <groupId>com.xyz</groupId> 
    <artifactId>foobar</artifactId> 
    <version>${project.version}</version> 
    <classifier>config</classifier> 
    <type>zip</type> 
    <overWrite>true</overWrite> 
</artifactItem> 
<artifactItem> 
    <groupId>com.xyz</groupId> 
    <artifactId>foobar</artifactId> 
    <version>${project.version}</version> 
    <type>jar</type> 
</artifactItem> 

如果artifactId的是foobar的,並分類爲config,我想版本返回,所以我可以修改它。

使用,我發現其他的例子,我想這一點,但沒有奏效:

/artifactItem/artifactId[.='foobar'] 
    /following-sibling::* 
     [count(.|/artifactItem/classifier[. ='config']/preceding-sibling::*) 
     = 
     count(/artifactItem/classifier[. ='config']/preceding-sibling::*) 
     ] 

任何建議,將不勝感激!

感謝

回答

0
//artifactItem[artifactId='foobar' and classifier='config']/version 

爲了解釋:

我們選擇的版本節點,從具有「foobar的」和「配置」的分類器的artifactId的artifactItem節點。

使用方括號來限定使用子XPATH語句的特定節點,其中上下文是括號前的節點。

這是你在找什麼?

+0

這可能會做到這一點,但我認爲我們的Perl模塊處理我的XPath有一個錯誤。我們會在我們清理時更新。 – user1467510

+0

這工作,謝謝。我們必須將我們使用的perl模塊從Twig.pm切換到XPath.pm。我們不能讓Twig來處理'和'操作符。再次感謝您的幫助! – user1467510