python解析xml超简单

Python解析XML,一篇文章教你秒懂,分分钟拿下! ElementTree是Python标准库中的一个模块 ,专门用于处理XML数据。它提供了一种简单且高效的方式来解析、创建、遍历和修改XML文档。ElementTree的核心类包括Element代表XML中的元素,以及代表整个XML文档树。ElementTree可以通过Python自带的包管理工具直接使用,无需额外安装。DOM(Document Object Model)是一种用于表示XML和HTML文档的编程接口。 阅读详情

Python解析XML

软件测试老师布置的实验,解析xml,因为是小白,所以刚做这题很棘手,百度搜了好多python解析xml,都相对而言太基础,举的例子,就是一个父节点带一个子节点,标签屈指可数,直接get标签名就得到了,但是由于老师布置的内容特别复杂,一个网页的内容支离破碎,所以网上的东西满足不了我这个不会动脑筋的人,看了半天也反思不起来,于是就只能研究下xml书了。还是有点瑕疵,有时间再改,废话不说嫩多了,例子如下

一、需要解析的xml新闻文档

<?xml version="1.0" encoding="UTF-8" ?>
<Body>
	<Title>成都网友称震感强烈 女同事当即哭泣</Title>
	<ReportTime type="absTime">2008年05月12日16:15</ReportTime>
	<Content> 
		<Paragraph>
			<Sentence>
				<Event eid="e1">
					<Time type="relTime"  tid="t1">5月12日14时28分</Time>,
					<Location  lid="l1">四川</Location>发生7.8级
					<Denoter type="emergency"  did="d1">地震</Denoter>。
				</Event>
			</Sentence>		
		</Paragraph>		
		<Paragraph>
			<Sentence>
				<Event eid="e2">
					<Time type="absTime"  tid="t2">15时50分</Time>,新民网
					<Participant  sid="s1">记者</Participant>网上
					<Denoter type="action"  did="d2">连线</Denoter>成都网友
					<Participant  oid="o2">姚先生</Participant>
				</Event>。
			</Sentence>
			<Sentence>
				<Event eid="e3"><Participant sid="s3,s4,s6,s7,s8,s9,s10">姚先生</Participant><Time type="relTime"  tid="t3">当时</Time>正在<Location  lid="l3">成都市武侯区的办公室</Location><Denoter type="action"  did="d3">打电话</Denoter>,</Event>
				
				<Event eid="e4" type="thoughtevent" >突然
					<Denoter  type="statement" did="d4">感觉</Denoter>
				</Event>  
				
				<Event eid="e5"><Object  oid="o5">电脑显示器</Object><Denoter type="action"  did="d5">晃</Denoter>得很厉害</Event>,
				<Event eid="e6">便<Denoter type="action"  did="d6">丢下</Denoter><Object  oid="o6">电话</Object></Event>、
				<Event eid="e7"><Denoter type="action"  did="d7">抓起</Denoter><Object  oid="o7">手机</Object>和<Object  oid="o7">钱包</Object></Event>
				<Event eid="e8">往外<Denoter type="action"  did="d8">跑</Denoter>,</Event>
				<Event eid="e9">手里还<Denoter type="action"  did="d9">拿</Denoter>着<Object  oid="o9">无绳电话子机</Object>,</Event>
				<Event type="thoughtevent" eid="e10">准备给远在江苏的<Participant type="recipient"  oid="o10">家人</Participant><Denoter type="action"  did="d10">打电话</Denoter>。</Event>  
			</Sentence>
		</Paragraph>
		
		<Paragraph>
			<Sentence>
				<Event eid="e11" type="thoughtevent"><Participant type="agent" sid="s11">姚先生</Participant><Denoter type="statement"  did="d11">说</Denoter></Event>
				<Event eid="e12">坐在他旁边的<Participant type="agent"  sid="s12,s13">女同事</Participant>立刻<Denoter  type="perception"  did="d12">感觉</Denoter>是在地震,</Event>
				<Event eid="e13">一下子<Denoter type="action" did="d13">哭</Denoter>了起来。</Event>
			</Sentence>
			<Sentence>
				<Event eid="e14" type="thoughtevent">据<Participant sid="s14">姚先生</Participant><Denoter  type="statement" did="d14">介绍</Denoter>,</Event>
				<Event eid="e15">成都市很多钢结构的<Object  oid="o15">房屋</Object>都有明显<Denoter type="emergency"  did="d15">震感</Denoter>,</Event>
				<Event eid="e16">当<Participant oid="o16">他</Participant>和<Participant>很多市民</Participant>一样<Denoter type="operation"  did="d16">疏散</Denoter>到<Location type="destination"  lid="l16">室外</Location>时,</Event>
				<Event eid="e17" type="thoughtevent">随即<Denoter  type="perception" did="d17">发现</Denoter></Event>
				<Event eid="e18"><Object  oid="o18">手机信号</Object>已经<Denoter type="stateChange"  did="d18">中断</Denoter></Event>,据称基站坏了。
			</Sentence>
			<Sentence>
				<Event eid="e19">疏散出来的人群中,<Participant sid="s19">大家</Participant>都在<Denoter type="action"  did="d19">谈论</Denoter>唐山大地震。</Event>
			</Sentence>
		</Paragraph>
		<Paragraph>
			<Sentence>
				<Event eid="e20" type="thoughtevent"><Participant  sid="s20">姚先生</Participant>向<Participant   oid="o20">新民网记者</Participant><Denoter  type="perception" did="d20">称</Denoter></Event>,
				<Event eid="e21" type="thoughtevent">据<Participant sid="s21">一些成都市民</Participant><Denoter  type="perception" did="d21">说</Denoter>,</Event>
				<Event eid="e22">成都的<Object  oid="o22">伊藤洋华堂武侯店</Object><Denoter type="stateChange"  did="d22">倒塌</Denoter>。</Event>
			</Sentence>
		</Paragraph>
	</Content>
	<eRelation thoughtcontent_eids="e5" thoughtevent_eid="e4" relType="Thoughtcontent"/>
	<eRelation thoughtcontent_eids="e12-e13" thoughtevent_eid="e11" relType="Thoughtcontent"/>
        <eRelation thoughtcontent_eids="e15-e16" thoughtevent_eid="e14" relType="Thoughtcontent"/>
        <eRelation thoughtcontent_eids="e18" thoughtevent_eid="e17" relType="Thoughtcontent"/>
         <eRelation thoughtcontent_eids="e21-e22" thoughtevent_eid="e20" relType="Thoughtcontent"/>
         <eRelation thoughtcontent_eids="e22" thoughtevent_eid="e21" relType="Thoughtcontent"/>
        <eRelation relType="Causal" cause_eid="e1" effect_eid="e5"/>
    	<eRelation relType="Causal" cause_eid="e12" effect_eid="e13"/>
	<eRelation relType="Causal" cause_eid="e1" effect_eid="e15"/>
	<eRelation relType="Causal" cause_eid="e1" effect_eid="e18"/>
	<eRelation relType="Causal" cause_eid="e1" effect_eid="e22"/>
</Body>

二、python解析步骤

from xml.dom.minidom import parse
import xml.dom.minidom
#dom解析xml
DOMTree = xml.dom.minidom.parse("D:\\QQPCmgr\\Desktop\\2.xml")
#返回文档的根节点
root1 = DOMTree.documentElement
#观察新闻发现,内容都在Event元素下
ContentNodes = root1.getElementsByTagName("Event")
#定义一个字符串,保存解析出的数据
content = ""
#遍历所有的Event
for i in range(len(ContentNodes)): 
    #获取第i个Event下的子节点
    SonNodes = ContentNodes[i].childNodes
    #遍历Event下的所有子节点
    for j in range(len(SonNodes)):
        print(SonNodes[j].nodeName)

输出:

Time
#text
Location
#text
Denoter
#text
************此处省略后文****************
for i in range(len(ContentNodes)): 
    #获取第i个Event下的子节点
   # print(ContentNodes[i].attributes)
    SonNodes = ContentNodes[i].childNodes
    
    #遍历Event下的所有子节点
    for j in range(len(SonNodes)):
       # print(SonNodes[j].nodeName)
         #获取所有Event下的所有子节点名字 #text是内容 要去掉,
       
        content += SonNodes[j].firstChild.data     
        #获取所有Event下的值,不包含在Event子节点的值
        if(ContentNodes[i].childNodes[j].nodeValue!=None):
            content+= ContentNodes[i].childNodes[j].nodeValue     

AttributeError: 'NoneType' object has no attribute 'data'
原因是那个#text 所以我们要把它去掉

输出event值要加判断

 if(ContentNodes[i].childNodes[j].nodeValue!=None):
            content+= ContentNodes[i].childNodes[j].nodeValue  
None
,
None
发生7.8级
None

,
成都的
None
None
****************此处省略后文**************
如果不加判断就会有None

三、 完整代码

from xml.dom.minidom import parse
import xml.dom.minidom
#dom解析xml
DOMTree = xml.dom.minidom.parse("D:\\QQPCmgr\\Desktop\\2.xml")
#返回文档的根节点
root1 = DOMTree.documentElement
#观察新闻发现,内容都在Event元素下
ContentNodes = root1.getElementsByTagName("Event")
#定义一个字符串,保存解析出的数据
content = ""
#遍历所有的Event
for i in range(len(ContentNodes)): 
    #获取第i个Event下的子节点
    SonNodes = names[i].childNodes
    #遍历Event下的所有子节点
    for j in range(len(SonNodes)):
        #print(SonNodes[j].nodeName)
         #获取所有Event下的所有子节点名字 #text是内容 要去掉,
        if(SonNodes[j].nodeName!="#text"):
           content += SonNodes[j].firstChild.data     
        #获取所有Event下的值,不包含在Event子节点的值
        if(ContentNodes[i].childNodes[j].nodeValue!=None):
            content+= ContentNodes[i].childNodes[j].nodeValue                  
print(content)

四、结果

5月12日14时28分,四川发生7.8级地震。15时50分,
新民网记者网上连线成都网友姚先生姚先生当时正在成都市武侯区的办公室打电话,
突然感觉电脑显示器晃得很厉害便丢下电话抓起手机和钱包往外跑,手里还拿着无绳电话子机,准备给远在江苏的家人打电话。
姚先生说坐在他旁边的女同事立刻感觉是在地震,一下子哭了起来。据姚先生介绍,成都市很多钢结构的房屋都有明显震感,
当他和很多市民一样疏散到室外时,随即发现手机信号已经中断疏散出来的人群中,大家都在谈论唐山大地震。
姚先生向新民网记者称据一些成都市民说,成都的伊藤洋华堂武侯店倒塌。

五、总结

本文利用的是Dom解析的XML
用到了的方法有
1 dom解析xml:xml.dom.minidom.parse
2 获取指定标签:getElementsByTagName
3 获取标签下子节点:ContentNodes[i].childNodes
4 获取元素名称:SonNodes[j].nodeName
5 返回根节点:DOMTree.documentElement
6 获取Element属性:ContentNodes[i].attributes
7 获取Element属性的值:ContentNodes[i].attributes.value
python对XML的解析总结 转载了这么多的文章,终于可以写一点自己的东西了。初学Python不久,程序中不当之处还请各位看官不吝赐教。 本文中很多地方都是参考了其他人的博文,具体的也不甚清楚到底参考了哪些,在此仅列出一个大概吧。绿色背景表示含有链接。 感谢gaodeyue,他的例程写的很好。我直接参考了他的DOM构建和解析XML文档的程序写了一个我自己的XML文档。另外的那篇Python处理XML数据之SAX篇我 阅读详情

相关推荐

【语音识别算法】深度学习语音识别算法与传统语音识别算法的区别、对比及联系

深度学习语音识别算法与传统语音识别算法在理论基础、实现方式、性能表现等方面存在显著区别,同时也有一些联系。下面将从几个方面详细比较这两种方法,并给出应用实例和代码示例。

weixin_51306394的博客 2569

python解析xml

你需要。

weixin_45365818的博客 4883

WIN下使用visual studio 2022安装GMSSL命令行工具

2.1 使用管理员权限打开visual studio(非常重要,否则最后一步 nmake install会失败)右键vs2022,以管理员身份运行即可。2.4 配置环境变量,gmssl可执行程序默认会被安装到如下目录。将如下路径添加到系统环境变量即可。添加后的环境变量如下。2.编译解压后的gmssl源码,编译过程主要参考install.md中的内容,README.md中的步骤不完整。2.2 打开vs2022的命令终端,右键文件,选择在终端中打开。1.下载gmssl源码,解压到相应目录。

qq_45794382的博客 1269

使用 Python 解析 XML —— 终极指南 2024

XML(可扩展标记语言)是一种标记语言,用于许多旨在存储和传输数据的应用程序中。它是创建结构化文档以及在网络上不同系统和应用程序之间交换数据的标准。XML 文件使用标记来定义文档中的元素,类似于 HTML(超文本标记语言)。不过,HTML 是为了显示数据而设计的,而 XML 则是为了在各种应用程序中存储和交互使用数据而设计的。获取更多信息或购买代理,请访问 Smartdaili。在本综合指南中,您已经学会了如何使用 Python 及其各种库来解析 XML 文档。

SmartGarret的博客 4405

从网格剖分到结果外推:一文拆解HFSS快速扫频(Fast Sweep)的底层逻辑与性能调优

本文深入解析了HFSS快速扫频(Fast Sweep)技术的底层逻辑与性能调优方法。通过ALPS算法实现频带外推,快速扫频相比离散扫频和插值扫频能提升3-5倍计算效率,特别适用于天线阵列、微波滤波器等宽频带分析场景。文章详细介绍了算法架构、参数优化策略及工程实践中的精度保障机制,帮助工程师高效完成电磁仿真。

weixin_28693447的博客 94

3、利用预训练卷积神经网络进行特征提取

本文介绍了如何使用预训练的卷积神经网络(如VGG16)进行图像特征提取,并将提取的特征存储在HDF5数据集中,以便后续用于机器学习模型的训练。文章详细阐述了特征提取的原理、HDF5数据格式的优势、HDF5DatasetWriter类的实现、特征提取流程的代码实现以及实际应用案例。通过该方法,可以在多种图像数据集上高效构建高精度的分类模型。

z2a3b4c5d的博客 116

深入浅出之xml文件解析(python)

XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。与HTML相似,XML也使用标签(tags)来定义数据,但XML的标签不是预定义的,而是由用户根据需要自定义的。这使得XML成为一种非常灵活和强大的数据表示方式。

浩瀚之水的专栏 1592

详解AUTOSAR:DaVinci Configurator配置CAN和UART数据协议解析器(RH850)(实战篇—1)

通过学习本篇博文项目,将会把所学的DaVinci Configurator知识系统串联起来。

不脱发的程序猿 2813

Python XML解析方法

Python XML解析方法

weixin_42194879的博客 9646

30天入门 SAP BTP 开发系列之十八:保姆级教程 - 如何部署 SAP UI5 到 SAP BTP Cloud Foundry 环境

本文摘要: 本文详细介绍了如何将SAP UI5应用部署到Cloud Foundry环境。首先需完成前17篇教程学习,创建SAP BTP子账户并启用Cloud Foundry环境。在SAP Business Application Studio中创建Fiori开发空间,导入GitHub上的UI5项目代码。通过npm run build命令打包成mtar文件后,使用cf deploy命令部署到Cloud Foundry。部署成功后,可在BTP控制台查看应用或通过命令行获取访问URL。整个过程涵盖了环境准备、代码

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

黑猫带你学UFS协议第8篇:UFS电气特性详解(Power、CLK、Reset等)

UFS强制支持secure mode。UFS设备可能会存储个人或者公司的信息,UFS提供把数据永久从设备上移除的功能,并且保证对存储介质进行逆向恢复数据也恢复不回来原有数据。安全模式是以逻辑单元为单位进行应用的,不同的逻辑单元可以有不同的安全模式。由于UFS设备的存储介质不同,所以把数据安全从存储介质上移除方式会有不同,spec提供了三种通用的移除方法,UFS设备至少支持其中一种。● 对存储的位置进行一次擦除操作。● 对存储的位置使用单一字符(比如0xAA)覆盖写,然后进行擦除。.........

黑猫奥利奥的博客 4077

python3.7 解析XML超简单的方法

#更新各品种行情时间 import json import xml.etree.ElementTree as ET import redis #这是例子,注意编码格式必须是utf-8否则会报错。 # <?xml version="1.0" encoding="utf-8"?> # <tradetime> # <item productid="c" time...

零渡的博客 2637

2025华为杯第二十二届中国研究生数学建模竞赛D题:低空湍流监测及最优航路规划 - 完整解题分析+完整MATLAB源码!(上篇)

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 2588

Python学习超简单第十二弹:XML解析和JSON解析

本文介绍了Python中XML和JSON两种数据格式的解析方法。

switch的博客 668

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

38.Python从入门到精通—Python3 XML 解析 什么是 XML Python 对 XML 的解析

XML(可扩展标记语言)是一种用于描述数据的标记语言,它可以用于表示各种类型的数据,包括文本、图像、音频、视频等。XML 的语法类似于HTML,但它更加灵活,可以自定义标记,并且不依赖于任何特定的应用程序或操作系统。XML的基本结构由元素、属性和文本组成。元素是标记的基本单位,它由开始标记、结束标记和元素内容组成。属性是用于描述元素的附加信息,它由属性名和属性值组成。文本是元素的内容,可以包含任何类型的数据。XML 可以用于数据交换、配置文件、Web 服务等领域。

weixin_50804299的博客 6377

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

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

Python XML 解析

XML 指可扩展标记语言(eXtensibleMarkupLanguage)。你可以通过本站学习XML 教程XML 被设计用来传输和存储数据。XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。Python 对 XML 的解析常见的 XML 编程接口有 DOM 和 SAX,这两种接口处理 XML 文件的方式不同,当然使用场合也不同。characters(content)方法。

qq_48368964的博客 1934

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python解析XML

1.xml简介 XML 全称 Extensible Markup Language,中文译为可扩展标记语言。XML 之前有两个先行者:SGML 和 HTML,率先登场的是 SGML, 尽管它功能强大,但文档结构复杂,既不容易学也不易于使用,因此几个主要的浏览器厂商均拒绝支持 SGML,这些因素限制了 SGML 在网上的传播性;1989 年 HTML 登场,它继承了 SGML 诸多优点,去除了 SGML 复杂庞大的缺点,HTML 在数据显示上表现十分出色,但它的语法是不可扩展的,因此其无法描述数据、可读性差,

Python热爱者的博客 1万+

Python解析简单XML文档完全指南:从入门到精通

Python解析简单XML文档完全指南:从入门到精通

KE17RS的博客 1619

python XML解析

xml解析器

qq_37718585的博客 6972

python xml 解析

python xml 解析

一个想交朋友的陌生人 2419

Python 解析 XML

XML 全称 Extensible Markup Language,中文译为可扩展标记语言。XML 之前有两个先行者:SGML 和 HTML,率先登场的是 SGML, 尽管它功能强大,但文档结构复杂,既不容易学也不易于使用,因此几个主要的浏览器厂商均拒绝支持 SGML,这些因素限制了 SGML 在网上的传播性;

qq_36594703的博客 4023

python 解析url上的xml_Python 解析简单的XML数据

问题你想从一个简单的XML文档中提取数据。解决方案可以使用 xml.etree.ElementTree 模块从简单的XML文档中提取数据。为了演示,假设你想解析Planet Python上的RSS源。下面是相应的代码:from urllib.request import urlopenfrom xml.etree.ElementTree import parse# Download the RSS...

weixin_39610678的博客 193

Python3 XML 解析

XML 指可扩展标记语言(eXtensibleMarkupLanguage),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。你可以通过本站学习XML 教程XML 被设计用来传输和存储数据。XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。

qq_25502783的博客 788

【Python】解析 XML

当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。ET的性能与SAX模块大致相仿,但是它的API更加高层次,用户使用起来更加便捷。DOM 解析器在任何处理开始之前,必须把基于XML文件生成的树状数据放在内存,所以DOM解析器的内存使用量完全根据输入资料的大小。SAX 解析器使用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。xmltodict是一个第三方库,它提供了一个功能,将Python的字典对象转换为XML,反之亦然。

athicket 1197

python xml解析_详解python解析XML的三种方式

一、XML简介XML是指可扩展标记语言(Extensible Markup Language)。XML是W3C的推荐标准。XML被设计为具有自我描述性。XML被设计用来传输和存储数据。XML标签没有被预定义,需要使用者自行定义标签。XML是各种应用程序之间进行数据传输的最常用的工具。二、XML解析本文介绍python解析XML文件的三种方式,分别是SAX、DOM、ElementTree。...

weixin_39732609的博客 2682
上一篇: 数据分析之泰坦尼克号案例
下一篇: pytorch之线性回归
snow5618
博客等级 码龄9年 141粉丝 51原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值