Python:用 ElementTree工具解析Maven,Pom.xml文件

如何利用python优化解析xml文件 导读 本篇文章意在演示如何利用 python 解析 xml 文件。这篇文章的引出背景是,在程序开发过程中,一贯坚持的做法是「约定优于配置」, 但怎么取检测有没有按照约定去做的,以 maven 为例,maven 提供了 maven-enforcer-plugin 插件,可以用这个插件定制一系列 规则。所以我们需要做的就是用 python 在 pom 文件中插入 maven-enforcer-plugin 的配置 。 python 环境: 3.8 本文首发于 https://russellgao.cn/pyt 阅读详情
ElementTree优点:

  • 轻量级的 Python 式的 API ,它由一个 C 实现来提供,速度快。http://effbot.org/zone/celementtree.htm
  • DOM 将整个 XML 加载进内存并且允许随机访问任何深度地元素。ET 没有必要加载整个文档到内存.
  • ET 的性能的平均值和 SAX 差不多,但是 API 的效率更高一点,更方便使用。 

Python 标准库中有两种实现ElementTree:
  • 纯 Python 实现例如 xml.etree.ElementTree 
  • 速度快一点的C实现的 xml.etree.cElementTree 

例子:pom.xml
<span style="font-weight: normal;"><?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.china</groupId>
	<artifactId>shanghai</artifactId>
	<version>1.1.1.20141031</version>
		<properties>
		<package.id>1</package.id>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		</properties>
	
   <dependencies>
	
		<dependency>
			<groupId>groupid1</groupId></span>
<span style="white-space:pre">			</span><artifactId>artifactId1</artifactId>	
			<version>1.1.1.20150130-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>groupid2 </groupId>
			<artifactId> artifactId2</artifactId>
			<version>1.1.2.20150130-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>groupid3 </groupId>
			<artifactId> artifactId3</artifactId>
			<version>1.1.3.20150130-SNAPSHOT</version>
  </dependency>
</project></span>

解析:
方法一:从硬盘文件中读取
<span style="font-weight: normal;">tree = ET.parse(POM_PATH)
root = tree.getroot()</span>

方法二:从string 中读取数据
<span style="font-weight: normal;">root = ET.fromstring(country_data_as_string)</span>

XML 是一种分级的数据形式,所以最自然的表示方法是将它表示为一棵树。ET 有两个对象来实现这个目的 - ElementTree 将整个 XML 解析为一棵树, Element 将单个结点解析为树.
每个Element包含:
  • tag : 字符串类型,代表Element 的类型,比如<groupId> 
  • atrributes :以python 字典方式存储,比如根节点的 xmlns 属性。可用 Element.get() 获取,Element.set() 修改
  • text : 节点内容
  • an optionaltail string
  • number of child elements :存储在Python 队列中
<span style="font-weight: normal;">for child in root:
    print child.tag
    print child.attrib</span>

结果:
{http://maven.apache.org/POM/4.0.0}modelVersion
{}
{http://maven.apache.org/POM/4.0.0}groupId
{}
{http://maven.apache.org/POM/4.0.0}artifactId
{}
{http://maven.apache.org/POM/4.0.0}version
{}
{http://maven.apache.org/POM/4.0.0}properties
{}
{http://maven.apache.org/POM/4.0.0}dependencies
{}

查找:

方法一:Element和 ElementTree 对象有一个 iter 方法可以对子结点进行深度优先遍历。  find()返回所查找tag的第一个值

for child in root.iter('%sdependency' %(POM_NS)):
    print child.find('$sgroupId' %POM_NS).text
方法二:

Element.findall() finds only elements with a tag which are direct children of the current element. 

Element.find() finds the first child with a particular tag,

for child in root.findall('%sdependency' %(POM_NS)):
    print child.find('%sgroupId' %POM_NS).text
# 命名空间
POM_NS = "{http://maven.apache.org/POM/4.0.0}"
关于命名空间,stackoverflower讨论 http://stackoverflow.com/questions/14853243/parsing-xml-with-namespace-in-python-elementtree

结果:
groupid1
groupid2 
groupid3 

修改:
ElementTree.write() 提供很便利的服务,下面代码修改<package.id>的值,加1,并增加属性'updateed'后写回文件
for id in root.iter('%spackage.id' % (POM_NS)):
    print id.text
    new_id = int(id.text) + 1
    id.text = str(new_id)
    id.set('updateed', 'yes')
tree.write(POM_PATH)</span>

print:  1
打开Pom.xml看到这行发生变化: <package.id updateed="yes">2</package.id> 

删除:
 Element.remove() 方法

增加:
SubElement() 方法
官网代码
>>> a = ET.Element('a')
>>> b = ET.SubElement(a, 'b')
>>> c = ET.SubElement(a, 'c')
>>> d = ET.SubElement(c, 'd')
>>> ET.dump(a)
<a><b /><c><d /></c></a>

代码:
<span style="font-weight: normal;"># -*- coding:utf-8 -*-
try:
    import xml.etree.cElementTree as ET
except ImportError:
    import xml.etree.ElementTree as ET

# 命名空间
POM_NS = "{http://maven.apache.org/POM/4.0.0}"
# POM文件路径
POM_PATH = "D:\\pom.xml"

tree = ET.parse(POM_PATH)
root = tree.getroot()

for child in root:
    print child.tag
print child.attrib

for child in root.iter('%sdependency' % (POM_NS)):
    print child.find('%sgroupId' % POM_NS).text

for child in root.findall('%sdependency' % (POM_NS)):
    print  child.find('%sgroupId' % POM_NS).text

for id in root.iter('%spackage.id' % (POM_NS)):
    print id.text
    new_id = int(id.text) + 1
    id.text = str(new_id)
    id.set('updateed', 'yes')
tree.write(POM_PATH)
</span>



参考:
FastMCP实战:用stdio+uv构建本地化AI工程上下文服务 MCP(Model Context Protocol)是一种轻量级协议,用于将本地项目结构化数据(如配置文件、源码、构建脚本)实时暴露给AI开发工具。其核心原理是通过stdio进程间通信,绕过网络与服务部署,实现低延迟、高隐私的上下文供给。技术价值在于让AI摆脱‘盲猜’,精准理解项目语义——例如识别`application-prod.yaml`中的真实配置项而非虚构键名。典型应用场景包括Cursor智能补全、Claude Code上下文增强、Figma设计系统对接等。本文聚焦FastMCP落地实践,深度融合 阅读详情

相关推荐

Dependency-check开源SCA工具深度解析:原理、避坑与CI/CD集成

软件成分分析(SCA)是现代DevSecOps中识别第三方组件安全风险的核心技术,其本质是通过静态依赖解析、二进制指纹识别与CVE漏洞数据库比对,实现对开源组件供应链风险的自动化溯源。Dependency-check作为主流开源SCA工具,依托本地NVD数据闭环、CPE精准映射和CVSS分级决策能力,在离线环境适配性、漏洞证据置信度和构建流程嵌入性方面具备独特优势。它不替代动态扫描或代码审计,而是填补‘已知漏洞’在构建阶段的检测空白,广泛应用于Java/Node.js/Python项目及Docker镜像的合

weixin_34245749的博客 457

xml.etree.ElementTree对xml文件的基本处理操作

xml.etree.ElementTree对xml文件的基本处理操作

weixin_42734533的博客 920

3分钟深度分析JUnit4测试报告:从通过率到性能瓶颈的实战指南

在软件工程实践中,单元测试是保障代码质量与系统稳定性的基石。JUnit作为Java生态中最主流的测试框架,其生成的测试报告蕴含了远超通过/失败状态的深层信息。通过解析Surefire插件生成的XML格式报告,开发者可以系统性地挖掘测试执行的性能瓶颈、失败根因及稳定性问题。这一过程不仅提升了测试的工程价值,更能直接作用于持续集成流水线的效率优化。例如,结合Python与pandas进行数据聚合分析,可以快速定位拖慢构建的“慢测试”,并识别出因环境依赖或并发问题导致的“闪烁测试”。本文将以JUnit4测试报告深

weixin_33978044的博客 344

python操作xml

python操作xml。

python基础 389

analyze-mvn-deps:Python脚本分析Maven依赖项升级机会

analytics-mvn-deps:替代的Maven依赖性分析器。 用于分析Maven依赖关系升级机会的Python3脚本。 它是用Java编写的和和的替代方法。 至少,对于简单的依赖关系升级机会。 它不是纯Python,它仍然在后台运行Maven的dependency:tree 。 该脚本由贡献而开发。 脚本依赖 该脚本使用 ( )和( ) $ pip3 install natsort requests 运行脚本 首先将cd插入您的克隆/检出(房间pom.xml所在的位置),然后执行以下操作: $ mvn install -DskipTests $ python3 <(curl -s https://raw.githubusercontent.com/paul-hammant/analyze-mvn-deps/master/analyze-mvn-deps.py) 在Ma

Python实现XML文件解析的示例代码

本篇文章主要介绍了Python实现XML文件解析的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

python通过lxml解析xml文件

root.findall(‘.//nodeName’) 获取的是root节点下面的所有子孙节点。1.xml中是有命名空间概念的,所有的节点,都需要namespace+nodeName来获取。项目中需要对xml解析,并且修改,所以使用lxml包来解析xml和重写xml,如下是代码。root.findall(‘./nodeName’) 获取的是root节点下面的子节点。2.其中获取节点有两个方式。

qq_30594137的博客 708

SAP BO系统启用邮件发送功能

目录 背景 维护邮件目标 启用邮件功能 背景 为了将BO报表或BO预警信息发送给特定的收件人,需要启用SAP BO系统的邮件发送功能。 维护邮件目标 1. 登录BO系统的中央管理控制台(CMC): http://<bo server name>:<port>/BOE/CMC 2. 点击“Organize”底下的“Servers”按钮进入BO服务器界面: 3. 点击“Servers List”进入服务器列表界面,右键点击JobServer&lt.

guowenming001的博客 1963

python 解析maven pom获取版本号

def getPomVersion(self): POM_NS = ‘{http://maven.apache.org/POM/4.0.0}’ jobHome=self.getProejctHome() os.chdir(jobHome) if os.path.exists(“pom.xml”): tree = ET.parse(“pom.xml”) root = tree.getroot() f...

ClimbHuan的博客 1760

第3章 信息技术服务(一)

对 第三章 《信息技术服务》中第一、二、三节 <内涵与外延、原理与组成、服务生命周期>进行总结、归纳

好好学习,天天向上的博客 733

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 292

python写xml多了ns0_Python改写maven的pom.xml文件

前阵子工作中用Python对xml格式的配置文件的内容进行修改,使用的模块是Python内置的xml.etree.cElementTree。然后修改maven的pom.xml的时候遇到2个问题,在这里分享下遇到的坑。以改下面中的pom.xml为例:4.0.0javaTestjavatest1.0-SNAPSHOTcom.alibabafastjson1.2.9org.testngtestng6.9...

weixin_40009393的博客 894

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.csdn.net/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

python 修改pom文件_在Python中读取Maven Pom xml

我有一个pom文件,定义如下:xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">4.0.0org.welshmy-site1.0.0pomorg.welsh.utilssite-tool1.0homepage/content/homepageasset...

weixin_42408865的博客 962

NY8A053E 例程 之 PWM Ouput

更多关于NY8A053E的相关例程请留言!

倪彬笑阳的博客 2925

C#+Winform+OpenCvSharp实战:5步搞定工业视觉检测框架(附源码下载)

本文详细介绍了如何使用C#、Winform和OpenCvSharp构建工业视觉检测框架,通过5个关键步骤实现高效、稳定的视觉检测系统。内容涵盖环境配置、相机集成、核心算法实现、系统集成与通信,以及部署优化,帮助开发者快速掌握工业视觉检测技术,提升检测精度和效率。附完整源码下载,助力工业数字化转型。

pz89012345的博客 551

Python3.5 实现xml 文件比较,比较pom.xml 中引用不一样的地方

Python 实现xml 文件比较,比较pom.xml 中引用不一样的地方 简单实现,之后有时间会继续优化。 最近本地的git 出现问题,先在这里和大家分享,之后会在gitHup上与大家分享, 话不多说,看代码: from xml.etree import ElementTree as ET def getSourceDict(): #testdict = ...

王小明的专栏 1605

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 536

python自动更新pom文件

项目越来越多,版本管理越来越麻烦,在项目上我使用 `maven version` 来进行版本管理。主要还是在分布式项目中模块众多的场景中使用,毕竟各个模块对外的版本需要保持统一

烟花散尽的专栏 1450

Wazuh部署记录

Wazuh是一个免费的开源安全平台,统一了XDR和SIEM功能。它可以保护内部部署、虚拟化、容器化和基于云的环境中的工作负载。Wazuh帮助组织和个人保护其数据资产免受安全威胁。它被全球数千个组织广泛使用,从小型企业到大型企业。443:仪表盘界面访问端口1515:探针连接服务器端口1514:探针回传信息端口以上3个端口必须打开防火墙。

墨痕诉清风的博客 1561

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Python】使用 xml.etree.ElementTree 解析XML笔记

要点:find,findall命令必须带有Namespaces,除非没有指定Namespaces # encoding=UTF-8 # 针对maven 的pom.xml 的解析 import re import xml.etree.ElementTree as ET def get_namespace(element): # 获取节点的namespace m = re.match('\{...

中国资深步行专家 优快云BLog 1318

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python etree遍历,简单的dom遍历Python使用xml.etree.ElementTree

E.g. consider parsing a pom.xml file:xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">com.parentparent1.0-SNAPSHOT../pom.xml2.0.0com.parent.somemodule...

weixin_28358083的博客 383

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

maven项目中批量导入jar包

本文转载自 wangjianbing1998 [查看原文](https://blog.csdn.net/wangjianbing1998/article/details/77606597) 在 maven项目中批量导入jar包,使用的是python代码工具类,自己编写的,其中只需要把这个py文件放到jar包的同一个目录下,双击这个py文件即可批量安装,并且自动生成一个out.xml文件,这个文...

weixin_43513980的博客 2247

xml添加新节点

#!/usr/bin/env python #coding:utf-8 # Author: xiaobaichuangtianxia--<> # Purpose: add jacoco dependency # Created: 2017/10/12 import sys import os import xml.etree.ElementTree as ET ...

weixin_30301449的博客 216

JUnit4测试分类成功率自动化跟踪与季度评审实践指南

在软件工程实践中,单元测试是保障代码质量的核心环节,其执行结果直接反映了软件模块的稳定性。JUnit作为Java领域最主流的测试框架,其测试用例的组织与执行原理是构建可靠测试体系的基础。通过引入测试分类(如按业务模块、测试类型)的概念,可以对测试结果进行精细化度量,这不仅能提升测试的工程价值,还能为团队提供更准确的质量洞察。在实际应用场景中,结合Maven/Gradle等构建工具和CI/CD流水线,可以实现测试数据的自动化采集与聚合。本文聚焦于如何利用Python脚本解析Surefire报告,并基于测试分类

weixin_34221036的博客 447
上一篇: Django表单提交后,如何获取相同name的不同value值
下一篇: python Loging 入门
yes1cpp
博客等级 码龄14年 15粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值