xmlstarlet select 基于条件的值
xmlstarlet select value based on condition
基于此link,我正在尝试解决类似的问题。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>iwidget</artifactId>
<packaging>jar</packaging>
<version>0.9.1b</version>
<name>iwidget</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
如果 artifactId
等于 iwidget
,我想提取 groupId
。
到目前为止我尝试过的:
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t -v "/x:project/x:groupId" < pom.xml
上面 returned groupId = foo.bar
,但是,我希望它 return 仅当 artifactId
等于 iwidget
$VAR='foo.bar'
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t -m "//x:project[artifactId="$VAR"]" -v "//x:project/groupId" < pom.xml
我错过了什么?
基于您的第一个命令,您应该能够在 project
上应用一个简单的 XPath 谓词以按 artifactId
元素值过滤它:
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t \
-v "/x:project[x:artifactId='iwidget']/x:groupId" < pom.xml
关于变量的使用,您需要用引号将其括起来,以便该值将被 XPath 处理器识别为字符串文字:
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t \
-v "/x:project[x:artifactId='$VAR']/x:groupId" < pom.xml
基于此link,我正在尝试解决类似的问题。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo</groupId>
<artifactId>iwidget</artifactId>
<packaging>jar</packaging>
<version>0.9.1b</version>
<name>iwidget</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
如果 artifactId
等于 iwidget
,我想提取 groupId
。
到目前为止我尝试过的:
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t -v "/x:project/x:groupId" < pom.xml
上面 returned groupId = foo.bar
,但是,我希望它 return 仅当 artifactId
等于 iwidget
$VAR='foo.bar'
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t -m "//x:project[artifactId="$VAR"]" -v "//x:project/groupId" < pom.xml
我错过了什么?
基于您的第一个命令,您应该能够在 project
上应用一个简单的 XPath 谓词以按 artifactId
元素值过滤它:
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t \
-v "/x:project[x:artifactId='iwidget']/x:groupId" < pom.xml
关于变量的使用,您需要用引号将其括起来,以便该值将被 XPath 处理器识别为字符串文字:
xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t \
-v "/x:project[x:artifactId='$VAR']/x:groupId" < pom.xml