我正在尝试从pom.xml中提取节点的值:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <parent>
        <groupId>org.me.labs</groupId>
        <artifactId>my-random-project</artifactId>
        <version>1.5.0</version>
    </parent>
    ...
</project>

我需要使用shell命令从XML中提取artifactId和版本。我有以下要求/注意事项:
  • shell脚本将在我们使用的构建程序集文件中完成,因此脚本越小越好。
  • 因为它将在多个系统(通常是RHEL5)上使用,所以我正在寻找可以在默认图像上本机运行的功能。
  • 类似的标签可以出现在pom的其他地方,因此我不能简单地awk这些标签。

  • 我尝试了以下方法:
  • xpath在我的Mac上可以使用,但默认情况下在RHEL机器上不可用。类似地,对于xmllint --xpath,我猜它仅适用于更高版本的xmllint,我没有也不能执行。
  • xmllint --pattern似乎很有希望,但是我似乎无法从xmllint --pattern '//project/parent/version' pom.xml(打印整个XML)或xmllint --stream --pattern '//project/parent/version' pom.xml(无输出)中获得输出。

  • 我意识到这是一个关于SO的常见问题,但是以上几点是为什么我不能使用这些答案。 TIA为您提供帮助。

    最佳答案

    --format仅用于格式化(缩进等)文档。您可以使用--xpath(在Ubuntu中测试,libxml v20900)完成此操作:

    $ xmllint --xpath "//project/parent/version/text()" pom.xml
    1.5.0
    

    10-07 12:36