当前位置: 代码迷 >> 综合 >> (待完善)python模块xml.etree.ElementTree解析处理XML文件介绍
  详细解决方案

(待完善)python模块xml.etree.ElementTree解析处理XML文件介绍

热度:58   发布时间:2023-12-12 04:57:13.0

前言

python提供了几个对于XML文件进行处理的模块,包括:
xml.etree.ElementTree
xml.dom
xml.dom.minidom
xml.dom.pulldom
xml.sax
xml.parsers.expat
本文主要介绍xml.etree.ElementTree(简称ET)模块,它是一个简单而轻量级的XML处理器。

关于XML文件的相关知识:
参考链接

ET模块的简述

XML是一种分层数据格式,最自然的表示方法是使用树。
为此, ET 有两个类分别是ElementTree 和Element 。 ElementTree 将整个XML文档表示为一个树, Element 表示该树中的单个节点。与整个文档的交互(读写文件)通常在 ElementTree 上完成。与单个XML元素及其子元素的交互是在 Element上 完成的。

使用以下的XML文件作为例子:其文件名是:country_data.xml

<?xml version="1.0"?>
<data><country name="Liechtenstein"><rank>1</rank><year>2008</year><gdppc>141100</gdppc><neighbor name="Austria" direction="E"/><neighbor name="Switzerland" direction="W"/></country><country name="Singapore"><rank>4</rank><year>2011</year><gdppc>59900</gdppc><neighbor name="Malaysia" direction="N"/></country><country name="Panama"><rank>68</rank><year>2011</year><gdppc>13600</gdppc><neighbor name="Costa Rica" direction="W"/><neighbor name="Colombia" direction="E"/></country>
</data>

分析XML文件可以看出根结点是data标签,里面有三个country标签的子结点,每个country标签下有四个不同的描述参数。

读取XML文件

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')

这里返回的tree是一个 ElementTree 类型的实例对象,将整个XML文档表示为一个树。

获取里面的元素

获取根结点元素

root = tree.getroot()

作为 Element , root 具有标签和属性字典,字典里存放关键字和值:

>>> root.tag
'data'
>>> root.attrib  #这里的data标签没有对应的属性,故输出的dic是空{}
{
    }               

根据标签获取对应的元素:

>>>for country in tree.findall('country'):print(country.attrib){
    'name': 'Liechtenstein'}
{
    'name': 'Singapore'}
{
    'name': 'Panama'}

根据标签名称所有匹配的直接子元素。按文档顺序返回包含所有匹配元素的列表。
例如上面的代码是查找tree下标签为country的子结点,共三个。

若改为

>>>for country in tree.findall('neighbor'):print(neighbor.attrib)

则没有输出,因为neighbor标签对应的元素不是tree的直接子结点,而是每个country的直接子结点。

用root.findall结果与tree.findall相同,如下:

>>>for country in root.findall('country'):print(country.attrib){
    'name': 'Liechtenstein'}
{
    'name': 'Singapore'}
{
    'name': 'Panama'}

官方文档说明:API手册