本机shell命令设置为从XML中提取节点值

前端之家收集整理的这篇文章主要介绍了本机shell命令设置为从XML中提取节点值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图从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和version。我有以下要求/意见:

> 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(no output)。

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

我已经设法使用xmllint –shell来暂时解决这个非常不合脚本的脚本。
echo "cat //project/parent/version" | xmllint --shell pom.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g'

如果XML节点具有像我的pom.xml这样的命名空间属性,事情变得更重,基本上按照名称提取节点:

echo "cat //*[local-name()='project']/*[local-name()='parent']/*[local-name()='version']" | xmllint --shell pom.xml | sed '/^\/ >/d' | sed 's/<[^>]*.//g'

希望它有帮助。如果有人可以简单地表达这些表达,我将不胜感激。

猜你在找的Bash相关文章