加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:38:57 所属栏目:安全 来源:网络整理
导读:我试图从pom.xml中提取节点的值: ?xml version="1.0" encoding="UTF-8"?project parent groupIdorg.me.labs/groupId artifactIdmy-random-project/artifactId version1.5.0/version /parent .../project 我需要使用shell命令从XML中提取artifactId和version
我试图从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'

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读