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

Issue with python script while parsing pom file in project

我在使用 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>