python的XML处理模块ElementTree

ElementTree是python的XML处理模块,它提供了一个轻量级的对象模型。它在Python2.5以后成为Python标准库的一部分,但是Python2.4之前需要单独安装。在使用ElementTree模块时,需要import xml.etree.ElementTree的操作。

ElementTree表示整个XML节点树,而Element表示节点数中的一个单独的节点。

构建XML文件

ElementTree(tag),其中tag表示根节点,初始化一个ElementTree对象。

Element(tag, attrib={}, **extra)函数用来构造XML的一个根节点,其中tag表示根节点的名称,attrib是一个可选项,表示节点的属性。

SubElement(parent, tag, attrib={}, **extra)用来构造一个已经存在的节点的子节点

Element.text和SubElement.text表示element对象的额外的内容属性,Element.tag和Element.attrib分别表示element对象的标签和属性。

ElementTree.write(file, encoding=‘us-ascii‘, xml_declaration=None,
default_namespace=None, method=‘xml‘),函数新建一个XML文件,并且将节点数数据写入XML文件中。

#encoding=utf-8
import xml.etree.ElementTree as ET

#新建xml文件
def buildNewsXmlFile():
        #设置一个新节点,并设置其标签为root
        root = ET.Element("root")

        #在root下新建两个子节点,设置其名称分别为sina和chinabyte
        sina = ET.SubElement(root, "sina")
        chinabyte = ET.SubElement(root, "chinabyte")

        #在sina下新建两个子节点,设置其节点名称分别为number和first
        sina_number = ET.SubElement(sina, "number")
        sina_number.text = "1"
        sina_first = ET.SubElement(sina, "first")
        sina_first.text = "http://roll.tech.sina.com.cn/internet_all/index_1.shtml"

        #在chinabyte下新建两个子节点,设置其节点名称为number和first
        chinabyte_number = ET.SubElement(chinabyte, "number")
        chinabyte_number.text = "1"
        chinabyte_first = ET.SubElement(chinabyte, "first")
        chinabyte_first.text = "http://www.chinabyte.com/more/124566.shtml"

        #将节点数信息保存在ElementTree中,并且保存为XML格式文件
        tree = ET.ElementTree(root)
        tree.write("urlfile.xml")

解析和修改XML文件

ElementTree.parse(source, parser=None),将xml文件加载并返回ElementTree对象。parser是一个可选的参数,如果为空,则默认使用标准的XMLParser解析器。

ElementTree.getroot(),得到根节点。返回根节点的element对象。

Element.remove(tag),删除root下名称为tag的子节点

以下函数,ElementTree和Element的对象都包含。

find(match),得到第一个匹配match的子节点,match可以是一个标签名称或者是路径。返回个element

findtext(match,default=None),得到第一个配置的match的element的内容

findall(match),得到匹配match下的所有的子节点,match可以是一个标签或者是路径,它会返回一个list,包含匹配的elements的信息

iter(tag),创建一个以当前节点为根节点的iterator。

这里有一个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文件的代码

#解析Xml文件
def parseXmlFile(xml_name):
        #将XMl文件加载并返回一个ELementTree对象
        tree = ET.parse(xml_name)

        #得到第一个匹配sina标签的Element对象
        sina = tree.find("contry")

        #得到sina的SubElement
        for sub_tag in sina:
                print sub_tag.text

        #得到所有匹配sina标签的Element对象的list集合
        list_contry = tree.findall("contry")

        for contry in list_contry:
                for sub_tag in contry:
                        print sub_tag.text
	#修改xml文件
        for rank in tree.iter(‘rank‘)
        new_rank = int(rank.text)+1
        rank.text = str(new_rank)
        rank.set(‘updated‘, ‘yes‘)
        tree.write(xml_name)

第一次的输出是:1,2008,14100

第二次的输出是:1,2008,14100,4,2011,59900,68,2011,13600

修改后的xml文件为

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

原文地址:https://www.cnblogs.com/fmgao-technology/p/9087584.html

时间: 2024-10-05 04:55:54

python的XML处理模块ElementTree的相关文章

python学习-xml处理,yaml处理,hashlib,subprocess模块

xml处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过<>节点来区别数据结构的: 1 <?xml version="1.0"?> 2 <data> 3 <country name="Liechtenstein"> 4 <rank updated="yes&qu

Python如何用dom模块生成XML文件

Python如何用dom模块生成XML文件呢? 主要方法三点: 首先.生成XML节点(node) createElement("node_name") 然后.给节点添加属性值(Attribute) node.setAttribute("att_name", "arr_value") 最后.节点的标签值(data) createTextNode("node_value") 其中第1.3点在创建完节点(节点值)之后,还需使用下面的

python解析XML之ElementTree

#coding=utf-8 from xml.etree import ElementTree as ET tree=ET.parse('test.xml') root = tree.getroot() #p=per.findall('caption') #for oneper in p: # for child in oneper.getchildren(): # print child.tag,':',child.text #for node in root.findall('caption

python json requests request 模块

1.json 通过Python的json模块,可以将字符串形式的json数据转化为字典,也可以将Python中的字典数据转化为字符串形式的json数据. 之前使用这个模块时,都是随用随查,浅尝辄止,对模块的功能了解不深. 随着使用次数的增加,我对这个功能完善的模块有了更多的了解,记录如下. json.loads 将字符串装换成python基本数据类型 json.dumps 将python数据类型转换成字符串方式返回 json a = {:} (a,(a)) c = json.dumps(a) (

python+selenium自动化软件测试(第12章):Python读写XML文档

XML 即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言.xml 有如下特征: 首先,它是有标签对组成:<aa></aa> 标签可以有属性: <aa id=’123’></aa> 标签对可以嵌入数据: <aa>abc</aa>Python对XML文档读写常用有几个模块: (1) xml.etree.ElementTree ElementTree就像一个轻量级的DOM,具有方便友好的A

Python基础5-常用模块

本节大纲 模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib subprocess logging模块 re正则表达式 模块,就是实现某种或者某类功能代码的合集. 类似于函数式编程和面向过程编程,函数式编程完成一个功能,其他代码可以调用,提供了代码的重用性跟代码间的耦合.对于一个复杂的功能,可能需要多个函数才能完成,多个.py文件的代码集合就叫做模块. 如:os是系统相关的模块:f

Python 3.x标准模块库目录

出处:http://blog.csdn.net/sadfishsc/article/details/10390065 文本 1. string:通用字符串操作 2. re:正则表达式操作 3. difflib:差异计算工具 4. textwrap:文本填充 5. unicodedata:Unicode字符数据库 6. stringprep:互联网字符串准备工具 7. readline:GNU按行读取接口 8. rlcompleter:GNU按行读取的实现函数 二进制数据 9. struct:将字

python基础知识9——模块2——常见内置模块

内置模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 1.sys 用于提供对Python解释器相关的操作: 1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platf

Python系列5之模块

模块 1. 模块的分类 模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). (1)自定义模块 自己定义的一些可以独立完成某个功能的一段程序语句,可以是一个文件,也可以是一个目录. (2)第三方模块 是由其他人写的一些程序语句,我们可以用它来实现自己的功能. (3)内置模块 是由python自己带的一些实现某种特定功能的组件. 2. 模块的导入 (1)python默认的模块寻找路径 当开始导入一个模快的时候,python默认的会先找到第一个路径去看