xml ElementTree
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)