如何用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
相关产品推荐
相关产品推荐

