python xml etree_Python 标准库之 xml.etree.ElementTree

一、导入ET

在Python标准库中,ElementTree有两种实现方式:一种是纯Python的实现xml.etree.ElementTree,另一种是速度更快一点的xml.etree.cElementTree。如果不确定环境中是否有cElementTree,可以使用如下的方式导入:

try:importxml.etree.cElementTree as ETexceptImportError:import xml.etree.ElementTree as ET

但从Python 3.3开始,会默认使用cElementTree来加快速度,但是之前的版本最好使用如上的代码,以提高代码的兼容性。

二、解析xml

假设我们现在有如下的xml

<?xml version="1.0"?>

1

2008

141100

4

2011

59900

68

2011

13600

有两种方式可以解析xml

1. 从文件中解析xml文件

>>> importxml.etree.cElementTree as ET>>> tree = ET.ElementTree(file='doc1.xml') #载入数据

>>> root = tree.getroot() #获取根节点

2. 从内存字符串中解析xml

root = ET.fromstring(country_data_as_string)

其中第二种方式可以直接过去根节点。

三、数据的访问

>>> for child inroot:

...printchild.tag, child.attrib

...

country {'name': 'Liechtenstein'}

country {'name': 'Singapore'}

country {'name': 'Panama'}

或者直接使用索引寻找子节点:

>>> root[0][1].text'2008'

或者使用xpath方式进行遍历,但其支持部分xpath方法,其支持的xpath请参照[4]

>>> root.findall("./country/neighbor")

[, , , , ]

四、 处理xml流

如下的程序将从xml文件中一边读入xml一边解析,并将在遇到标签开始或标签结束的时候返回相应的事件。

for event, elem in ET.iterparse(sys.argv[2]):if event == 'end':if elem.tag == 'location' and elem.text == 'Zimbabwe':

count+= 1elem.clear()#discard the element

这个程序将在检查到标签结束的时候,对指定的标签进行计数。最后的elem.clear()保证了,在解析的之后尽快的释放内存。

五、Element对象

class xml.etree.ElementTree.Element(tag, attrib={}, **extra)

tag:string 元素代表的数据种类。

text:string 元素的内容。

tail:string 元素的尾形。

attrib:dictionary 元素的属性字典。

#针对属性的操作

clear() 清空元素的后代、属性、text和tail也设置为None。

get(key, default=None) 获取key对应的属性值,如该属性不存在则返回default值。

items() 根据属性字典返回一个列表,列表元素为(key, value)。

keys() 返回包含所有元素属性键的列表。

set(key, value) 设置新的属性键与值。

#针对后代的操作

append(subelement) 添加直系子元素。

extend(subelements) 增加一串元素对象作为子元素。#python2.7新特性

find(match) 寻找第一个匹配子元素,匹配对象可以为tag或path。

findall(match) 寻找所有匹配子元素,匹配对象可以为tag或path。

findtext(match) 寻找第一个匹配子元素,返回其text值。匹配对象可以为tag或path。

insert(index, element) 在指定位置插入子元素。

iter(tag=None) 生成遍历当前元素所有后代或者给定tag的后代的迭代器。#python2.7新特性

iterfind(match) 根据tag或path查找所有的后代。

itertext() 遍历所有后代并返回text值。

remove(subelement) 删除子元素。

六、ElementTree对象

class xml.etree.ElementTree.ElementTree(element=None, file=None)

element如果给定,则为新的ElementTree的根节点。

_setroot(element):用给定的element替换当前的根节点。慎用。

# 以下方法与Element类中同名方法近似,区别在于它们指定以根节点作为操作对象。

find(match)

findall(match)

findtext(match, default=None)

iter(tag=None)

iterfind(match)

parse(source, parser=None) 装载xml对象,source可以为文件名或文件类型对象

getroot() 获取根节点

write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None,method="xml")

七、模块方法-->用于生成xml文件

1. 创建一个特别的element,通过标准序列化使其代表了一个comment。comment可以为bytestring或unicode。

ET.Comment(text=None)

2. 生成一个element tree,通过sys.stdout输出,elem可以是元素树或单个元素。这个方法最好只用于debug。

ET.dump(elem)

3. text是一个包含XML数据的字符串,与XML()方法类似,返回一个Element实例。

ET.fromstring(text)

4. 从字符串的序列对象中解析xml文档。缺省parser为XMLParser,返回Element实例。V2.7中新加属性

ET.fromstringlist(sequence, parser=None)

5. 检查是否是一个element对象。

ET.iselement(element)

6. 将文件或包含xml数据的文件对象递增解析为element tree,并且报告进度。events是一个汇报列表,如果忽略,将只有end事件会汇报出来。

注意,iterparse()只会在看见开始标签的">"符号时才会抛出start事件,因此届时属性是已经定义了,但是text和tail属性在那时还没有定义,同样子元素也没有定义,因此他们可能不能被显示出来。如果你想要完整的元素,请查找end事件。

ET.iterparse(source, events=None, parser=None)

7. 将一个文件或者字符串解析为element tree。

ET.parse(source, parser=None)

8. 这个方法会创建一个特别的element,该element被序列化为一个xml处理命令。

ET.ProcessingInstruction(target, text=None)

9. 注册命名空间前缀。这个注册是全局有效,任何已经给出的前缀或者命名空间uri的映射关系会被删除。 V2.7新加属性

ET.register_namespace(prefix, uri)

10. 子元素工厂,创建一个Element实例并追加到已知的节点。

ET.SubElement(parent, tag, attrib={}, **extra)

11. 生成一个字符串来表示表示xml的element,包括所有子元素。element是Element实例,method为"xml", "html", "text"。 返回包含了xml数据的字符串。

ET.tostring(element, encoding="us-ascii", method="xml")

12. 生成一个字符串来表示表示xml的element,包括所有子元素。element是Element实例,method为"xml","html","text"。返回包含了xml数据的字符串列表。V2.7新添加属性

ET.tostringlist(element, encoding="us-ascii", method="xml")

13. 从一个字符串常量中解析出xml片段。返回Element实例。

ET.XML(text, parser=None)

14. 从字符串常量解析出xml片段,同时返回一个字典,用以映射element的id到其自身。

ET.XMLID(text, parser=None)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的xml.etree.ElementTree是一个用于解析和操作XML文档的模块。它提供了一种简单的方式来读取和写入XML文件,并且可以轻松地遍历XML文档的元素和属性。使用xml.etree.ElementTree模块,可以将XML文档转换为Python对象,然后对其进行操作和处理。 ### 回答2: Python xml.etree.elementtree 是一个 Python 模块,用于解析 XML 文档并创建 XML 元素树。这个模块提供了一种简单且高效的方式来处理 XML 数据,可以帮助开发者轻松地构建 Python 对象/字典和 XML 文档之间的映射。 使用 xml.etree.ElementTree,可以将 XML 文档转换为元素对象树,然后使用元素对象进行文档处理。使用这个模块可以很容易地将 XML 数据解析和转换为 Python 中的数据类型,例如列表、字典和字符串等。同时,ElementTree 还支持 XPath 表达式(XPath 是一种用于选取 XML 文档中数据的语言)。 ElementTree 将一个 XML 文档解析成一个通用的元素树结构,将每个元素作为 Python 对象中的一个元素。在几乎所有的XML处理扩展中,ElementTree都是标准的API。其重要的特点包括: 1. 简单易用的API,支持解析和生成XML; 2. 支持遍历解析XML文档; 3. 支持XPath定位; 4. 遵守XML标准,并且能够正确处理XML文档中的编码格式、属性和命名空间等细节; 5. 兼容Python3与Python2. 在Python应用领域中,XML是一种常见格式,如SOAP和RESTful Web Services、HTML、配置文件等等。使用 ElementTree,可以方便地处理这些数据供应用完成数据处理,构建XML数据请求和响应等。总之,Python xml.etree.elementtree 是一个基于 XML 的开发框架,可用于快速,可靠地构建和解析 XML 文档。 ### 回答3: Python 中的 xml.etree.elementtree 是一个用于操作 XML 数据的库。ElementTree 是 Element 的树形结构,允许对其进行操作并将其转换为 XML 文件或字符串。它被广泛应用于 Web 开发和数据处理,例如在面向 XML 数据的 Web 应用程序和配置文件中。 ElementTree 提供了一个对 XML 元素进行递归访问的 API。通过向 XML 解析器提供 XML 文件路径或 URL,ElementTree 可以读取 XML 文件并将其转换为一个 element 对象。通过 element 对象,我们可以获得元素的文本内容、属性、子元素、标签等信息。 ElementTree 还提供了一些实用函数,帮助我们轻松地操作 XML 数据。例如,我们可以使用 find() 和 findall() 函数搜索 Element 中的子元素,并使用 set() 函数设置元素的属性、text 属性来获取或设置元素的文本内容。 在使用 xml.etree.elementtree 进行 XML 数据处理时,我们还可以使用 lxml、BeautifulSoup 和 html5lib 等库,以便更方便地解析、操作和处理 XML 数据。 总之,Python 中的 xml.etree.elementtree 提供了强大的 XML 数据处理功能,使得我们可以轻松地访问、解析和操作 XML 数据。无论是 Web 应用程序还是常规数据处理,ElementTree 都是一个值得信赖和广泛运用的库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值