工具:

centos 7 中已经带有xmllint不需要安装。

解析普通类型

解析 text1.xml 文件

<paraent>
	<item name="1">
		<key>username</key>
		<value>1111</value>
	</item>
	<item name="2">
		<key>username</key>
		<value>777</value>
	</item>
	<item name="3">
		<key>username</key>
		<value>444</value>
	</item>
</paraent>

获取 paraentname3的item中的value的值可以使用

xmllint --xpath '//item[@name=2]/value/text()'  text1.xml

默认情况下xmllint 以xml文件中的根节点作为入口,上面的示例中也就是 paraent

得到

777

解析 pom.xml

需要解析pom.xml 如下

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>edu.hznu.crypto</groupId>
    <artifactId>alg-sm2-demo</artifactId>
    <version>1.0-0</version>
    ...
</project>

由于pom.xml 文件的project属性中存在xmlns命名空间问题,无法直接通过上面的表达式解析

需要通过手动指定空间位置的方式进行一层一层的寻找

比如说现在需要获取这个maven项目的版本号,也就是project > version

xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml

/*[local-name()="xxxx"] 中的xxx也就是指定节点位置

致谢

[1]. Mythsman . 2017.10.15 . https://blog.mythsman.com/post/5d2b5ebf25601931a5f8d885/?tdsourcetag=s_pctim_aiomsg
[2]. Stackoverflow . Jeff Mercado . https://stackoverflow.com/questions/41114695/get-pom-xml-version-with-xmllint

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐