2014-12-01 112 views
0
<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"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>Foo</groupId> 
    <artifactId>Bar</artifactId> 
    <version>9.9.9</version> 
</project> 

我想編輯值與xmlstarlet,但是我有想出指向該節點,因爲父節點具有多個屬性,我可以」中的XPath麻煩似乎讓我的方式繞過它。的XPath與multipe節點屬性

我嘗試以下,但我得到無效表達錯誤:

xmlstarlet ed --omit-decl -L -u "/project[@xmlns=http://maven.apache.org/POM/4.0.0 and @xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance and @xsi:schemaLocation=http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd]/version" -v 10.10.10 ./file.xml 

回答

1

xmlns屬性namespace定義。沒有冒號的那個定義了默認的命名空間。 XPath不支持默認名稱空間,因此您必須明確引用它。 XMLStarlet的最新版本(1.5.0+)綁定默認命名爲 「_」,所以你可以這樣做:

xmlstarlet ed --omit-decl -L -u "/_:project/_:version" -v 10.10.10 ./file.xml 

您可以顯式綁定命名空間是這樣的:

xmlstarlet ed -N pom=http://maven.apache.org/POM/4.0.0 --omit-decl -L -u "/pom:project/pom:version" -v 10.10.10 ./file.xml 

參見,Section 5.1 of the manual

+0

哦,它像一個魅力工作。非常感謝! :) – Ali 2014-12-02 16:18:11

0

嘗試包單引號內的所有屬性值:

"/project[@xmlns='http://maven.apache.org/POM/4.0.0' and @xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' and @xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd']/version" 
相關問題