xmlstarlet 根据条件选择值

标签 xml xpath xmlstarlet

基于此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

上面返回了 groupId = foo.bar,但是,我希望它仅在 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

关于xmlstarlet 根据条件选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826752/

相关文章:

Python Scrapy爬行在chrome中使用xpath元素选择和selenium花费太多时间

xml - 使用 xmlstarlet 1.6.1 更新带有命名空间的 XML

xmlstarlet 选择具有特定属性值的节点

XMLstarlet 和 Windows 任务操作

xml - 如何使用 xslt 进行数学运算

xml - 验证 Flex/actionscript 的 XML 解析器?

c++ - LibXML 不返回 xpath 结果

c# - 如何在 C# 中使用 XPath 选择类名中包含字符串的节点?

python - 使用 python 创建循环来查找 pom.xml 文件中的依赖项

java - android从类似于用于字符串的方法的微调器中获取一个整数