xml ElementTree

2019-03-21  本文已影响0人  xncode

xml.etree.ElementTree

通过ElementTree代表整个xml文档树,通过Element来代表一个节点,对整个xml文档的操作例如读写文件的操作使用ElementTree,对于一个元素和子元素的操作使用Element

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
root = ET.fromstring(country_data_as_string)

解析

parse

可接收文件名称或打开的文件对象

生成的是ElementTree

fromstring

接收字符串形式的xml文件

生成的是Element

Element

每个节点有tag和attrib和text

另节点是一个可迭代的对象,可获得子节点

for child in root:
    print(child.tag, child.attrib)

也可通过下表来获取子节点

root[0][1]

不解析注释等

查找元素

iter

以调用节点开始,深度优先寻找所有指定tag名称的元素并返回

find findall

只找直接子元素为指定tag名称的

修改文件

Element的text可直接读写,attrib是一个类dict的对象,也可在element上直接调用

get可获得指定名称的attrib
set可设置指定名称的attrib内容

append在Element后加子节点

remove移除一个子节点

最后可用ElementTree的write函数指定输出名称保存

另外有ET.dump函数可输出xml文档的

名称空间

如果使用了名称空间,则元素名称前还需携带,例如

{http://characters.example.com}character

最好是给出名称空间,例如

ns = {'real_person': 'http://people.example.com',
      'role': 'http://characters.example.com'}

for actor in root.findall('real_person:actor', ns):
    name = actor.find('real_person:name', ns)
    print(name.text)
    for char in actor.findall('role:character', ns):
        print(' |-->', char.text)

函数参考

项目级别

iselement
fromstring fromstringlist parse iterparse
SubElement

dump可接收element或element_tree并输出到标准输出,只适用于调试

tostringlist tostring(element, encoding="us-ascii", method="xml", *, short_empty_elements=True)
默认输出的是bytestring,传入encoding="unicode"生成Unicode字符串

register_namespace(prefix, uri)

Element级别

Element(tag, attrib={}, **extra)

clear清除所有子元素 属性 text等所有
get items keys set
append extend
find findall findtext
insert
iter iterfind itertext
remove

ElementTree级别

ElementTree(element=None, file=None)

find findall findtext
getroot iter iterfind parse
write(file, encoding="us-ascii", xml_declaration=None, default_namespace=None, method="xml", *, short_empty_elements=True)

上一篇下一篇

猜你喜欢

热点阅读