Trying to use xmlstarlet to set the version on a pom.xml The problem is that it sets the values of ALL "value" nodes in the pom.xml and not just the one that matches the XPATH Here is what I am using:
xmlstarlet ed --inplace -N x=http://maven.apache.org/POM/4.0.0 -u '//x:project//x:version' -v $NEWVERSION pom.xml
So it works but with the unwanted side-effect of setting the value in other xpaths like /project/parent/version and /project/dependencies/dependency/version Why is it doing that?
CodePudding user response:
Why is it doing that?
Because you asked for it. //
is
shorthand
for /descendant-or-self::node()/
so the XPath expression
//x:project//x:verston
targets all version
elements which are descendants of any project
element in the namespace bound to prefix x
.
To change only the version
which is the child of the root element
project
, for example:
xmlstarlet edit --inplace -u '/_:project/_:version' -v $NEWVERSION pom.xml
where the default namespace is bound to the _
(underscore) prefix
since it is declared in the root element (user's guide
ch. 5).