Python解析Maven pom.xml推荐xml.etree.ElementTree(轻量)或lxml(支持XPath、命名空间友好),需处理xmlns命名空间,提取groupId、artifactId、version、dependencies及properties等信息,并注意version可能来自parent或properties变量替换。
用Python解析Maven的pom.xml文件,核心是读取XML结构并提取依赖、版本、坐标等关键信息。推荐使用标准库xml.etree.ElementTree(轻量、无需额外安装),也可选lxml(支持XPath、命名空间更友好,需安装)。
适用于没有复杂命名空间或简单项目。注意pom.xml通常声明了Maven命名空间(xmlns="http://maven.apache.org/POM/4.0.0"),直接查找会失败,需处理命名空间。
ET.parse()加载文件,获取根元素ns = {"m": "http://maven.apache.org/POM/4.0.0"}
root.find("m:groupId", ns)获取groupIdm:dependencies/m:dependency下,遍历每个m:dependency提取m:groupId、m:artifactId、m:version
当pom含
profile、properties、parent继承或多个命名空间时,lxml更稳健,支持完整XPath和自动命名空间映射。
pip install lxml
etree.parse()加载,调用root.nsmap自动获取命名空间映射root.xpath("//m:dependency", namespaces=root.nsmap)精准定位"//m:dependency[m:scope='test']"过滤测试依赖封装一个通用解析函数,返回字典形式的项目信息:
groupId、artifactId、version(注意version可能来自或)groupId、artifactId、version、scope(默认compile)m:properties/*,构建键值对供后续版本替换(如${spring.version})m:parent/m:groupId等,用于继承链分析实际解析中容易忽略细节导致结果不准:
version写在里(如5.3.21 ),需先解析properties再做变量替换中的版本不直接参与依赖决议,但影响子模块——是否提取取决于用途xsi:schemaLocation引用外部XSD,ElementTree不校验,不影响解析,但lxml可选开启验证open(..., encoding="utf-8")显式指定编码,避免乱码