解析项目中的pom文件时出现python脚本问题



使用python脚本提取版本号时遇到问题。它在运行脚本时返回none。有人能帮我吗?

Python脚本:

import xml.etree.ElementTree as ET
tree = ET.parse('pom.xml')
root = tree.getroot()
releaseVersion = root.find("version")
print(releaseVersion)

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<artifactId>watcher</artifactId>
<version>0.0.1-SNAPSHOT</version>
<groupId>com.test</groupId>
<name>file</name>
<packaging>jar</packaging>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<relativePath/>
<version>2.6.1</version> 
</parent>
</project>

您没有考虑到所有元素都在<project>元素中由xmlns="http://maven.apache.org/POM/4.0.0"定义的默认命名空间中。

因此,您必须使用这个名称空间创建查询。

import xml.etree.ElementTree as ET    
tree = ET.parse('pom.xml')
root = tree.getroot()
NS = { 'maven' : 'http://maven.apache.org/POM/4.0.0' }
releaseVersion = root.find("maven:version",NS)
print(releaseVersion.text)

这里,NS = { ... }定义了在下面的XPath表达式中使用的名称空间(在下面由其前缀maven引用(。

您的pom.xml在项目标记中有一个名称空间xmlns="http://maven.apache.org/POM/4.0.0"

如果必须使用全名进行搜索,则需要遵循{namespace}tag

>> root.find("{http://maven.apache.org/POM/4.0.0}version")
<Element '{http://maven.apache.org/POM/4.0.0}version' at 0x0000014635EC0A40>

但如果你不介意,你可以用{*}tag搜索

>> root.find("{*}version")
<Element '{http://maven.apache.org/POM/4.0.0}version' at 0x0000014635EC0A40>

最新更新