xml.etree.ElementTree用于解析和构建XML文件
1 2008 141100 4 2011 59900 68 2011 13600
解析XML文件
parse()函数,从xml文件返回ElementTree
from xml.etree.ElementTree import parsetree = parse('demo.xml') //获取ElementTreeroot = tree.getroot() // 获取根元素
Element.tag 、Element.attrib、Element.text
In [6]: root.tagOut[6]: 'data'In [7]: root.attribOut[7]: {}In [25]: root.textOut[25]: '\n '
for child in root 迭代获得子元素
In [8]: for child in root: ...: print(child.tag, child.attrib) ...: country {'name': 'Liechtenstein'}country {'name': 'Singapore'}country {'name': 'Panama'}
Element.get() 获得属性值
In [27]: for child in root: ...: print (child.tag, child.get('name')) ...: country Liechtensteincountry Singaporecountry Panama
root.getchildren() 获得直接子元素
In [21]: root.getchildren()Out[21]: [, , ]
root[0][1] 根据索引查找子元素
In [9]: root[0][1].textOut[9]: '2008'In [10]: root[1][0].textOut[10]: '4'
root.find() 根据tag查找直接子元素,返回查到的第一个元素
In [13]: root.find('country').attribOut[13]: {'name': 'Liechtenstein'}
root.findall() 根据tag查找直接子元素,返回查到的所有元素的列表
In [16]: for country in root.findall('country'): ...: print (country.attrib) ...: {'name': 'Liechtenstein'}{'name': 'Singapore'}{'name': 'Panama'}
root.iterfind() 根据tag查找直接子元素,返回查到的所有元素的生成器
In [22]: root.iterfind('country')Out[22]:.select at 0x7f6736dccfc0>
支持的XPath语句(XML Path)
In [19]: root.findall('.//rank') //查找任意层次元素Out[19]: [, , ]In [32]: root.findall('country/*') //查找孙子节点元素Out[32]: [ , , , , , , , , , , , , , ]In [33]: root.findall('.//rank/..') // ..表示父元素Out[33]: [ , , ]In [34]: root.findall('country[@name]') // 包含name属性的countryOut[34]: [ , , ]In [35]: root.findall('country[@name="Singapore"]') // name属性为Singapore的countryOut[35]: [ ]In [36]: root.findall('country[rank]') // 孩子元素中包含rank的countryOut[36]: [ , , ]In [37]: root.findall('country[rank="68"]') // 孩子元素中包含rank且rank元素的text为68的countryOut[37]: [ ]In [38]: root.findall('country[1]') // 第一个countryOut[38]: [ ]In [39]: root.findall('country[last()]') // 最后一个countryOut[39]: [ ]In [40]: root.findall('country[last()-1]') // 倒数第二个countryOut[40]: [ ]
root.iter() 递归查询指定的或所有子元素
In [29]: root.iter()Out[29]: <_elementtree._element_iterator at 0x7f67355dd728>In [30]: list(root.iter())Out[30]: [, , , , , , , , , , , , , , , , , ]In [31]: list(root.iter('rank'))Out[31]: [ , , ]