You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python读取Maven POM.xml中的artifactId与version值

解决Python解析Maven POM.xml获取artifactId和version的问题

嘿,别担心!刚转用Python处理XML确实会遇到和PHP XPath不一样的地方,尤其是命名空间这个坑,我来帮你一步步搞定。

首先,你的POM.xml根元素带了命名空间(xmlns="http://maven.apache.org/POM/4.0.0"),这是导致你之前方法失效的核心原因——XML里所有子元素都会继承这个命名空间,直接用artifactId或version作为标签名查找是找不到的,因为实际的标签是带命名空间前缀的长字符串(比如{http://maven.apache.org/POM/4.0.0}artifactId)。

下面给你两种可行的解决方案:

方法1:规范处理命名空间(推荐)

这种方法更符合XML解析的规范,也更容易维护:

import xml.etree.ElementTree as ET

# 定义POM的命名空间,对应根元素的xmlns属性值
ns = {'maven': 'http://maven.apache.org/POM/4.0.0'}

tree = ET.parse('pom.xml')
root = tree.getroot()

# 遍历所有<dependency>元素
for dependency in root.findall('maven:dependencies/maven:dependency', ns):
    # 获取artifactId和version的文本内容
    artifact_id = dependency.find('maven:artifactId', ns).text
    version = dependency.find('maven:version', ns).text
    print(f"artifactId: {artifact_id}, version: {version}")

# 如果你还想获取项目自身的artifactId和version(根节点下的)
project_artifact_id = root.find('maven:artifactId', ns).text
project_version = root.find('maven:version', ns).text
print(f"\n项目自身信息:artifactId: {project_artifact_id}, version: {project_version}")

方法2:简单过滤标签后缀(快速解决)

如果不想处理命名空间,也可以通过判断标签名的后缀来匹配:

import xml.etree.ElementTree as ET

tree = ET.parse('pom.xml')
root = tree.getroot()

# 遍历所有元素,只保留artifactId和version
for elem in tree.iter():
    # 提取标签名的最后部分(去掉命名空间前缀)
    tag_name = elem.tag.split('}')[-1]
    if tag_name in ['artifactId', 'version']:
        print(f"{tag_name}: '{elem.text}'")

这样就能精准输出你需要的artifactId和version的值啦!

内容的提问来源于stack exchange,提问作者meejo57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:37:14