< 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 > < neighbor name = " xxxx " direction = " W " /> </ data >

1、导入模块 print ( root . attrib ) # {}

另一种方式是 通过 open read() 将文件内容读取为字符串 str 格式。
再通过 ET.fromstring() 函数获取root 节点。获取 root 节点之后的操作就都一样了。

import xml.etree.ElementTree as ET
with open('text.xml') as f:
    data_str = f.read()
root = ET.fromstring(data_str)
print(root.tag)   # data
print(root.attrib)   # {}

2、遍历一级子节点、获取子节点的标签 与 属性

for child in root:
    print(child.tag, child.attrib)
# country {'name': 'Liechtenstein'}
# country {'name': 'Singapore'}
# country {'name': 'Panama'}

3、通过索引 获取数据

root[0][1]是下二级子节点的第2个元素
print(root[0][1].tag)   # year
print(root[0][1].attrib)   # {}
print(root[0][1].text)   # 2008

4、Element.findall()、Element.find() - 按照 tag 值查找 子节点

Element.findall()Element.find()

Element.findall('xxx') :查找当前节点(Element)下,tag为'xxx' 的所有子节点,放到一个list中 Element.find('xxx'):查找当前节点(Element)下,tag为'xxx' 的第一个子节点 Element.get(key) : (节点属性是一个字典)获取节点属性 对应的 value for country in root.findall('country'): rank = country.find('rank').text # name = country.get('name') print(name, rank) # Liechtenstein 1 # Singapore 4 # Panama 68

5、Element.iter() - 循环迭代方式 查找指定 tag 的节点

这里 循环迭代方式 指的是,在该节点下的 所有阶 的子节点中查找。不像 find 和 findall,find 和 findall 只在 一级子节点中查找。

# 生成一个迭代器
print(root.iter('neighbor'))   # <_elementtree._element_iterator object at 0x101a6d630>
# root 节点下,循环迭代的方式查找 tag 为 'neighbor' 的 子节点
for neighbor in root.iter('neighbor'):
    print(neighbor.attrib)
# {'name': 'Austria', 'direction': 'E'}
# {'name': 'Switzerland', 'direction': 'W'}
# {'name': 'Malaysia', 'direction': 'N'}
# {'name': 'Costa Rica', 'direction': 'W'}
# {'name': 'Colombia', 'direction': 'E'}
# {'name': 'xxxx', 'direction': 'W'}
                                    这两天学习如何使用微软的一个API,用python写了接口代码使用HTTP方法测试,HTTP的API的最后返回是一个XML文件,翻了翻,看见pythonxmlElementTree这套接口的API看起来比较对胃口,于是使用了一下ElementTree进行解析但死活用find,和findall两个函数接口服务得到希望的tag,百思不得其借,Python的docamention上面对这两个函数,解...
                                    python标准库中的xml.etree.ElementTree使用起来很方便,对于xml的操作封装的也挺好。但有一些细节需要引起各位使用者的注意:其中xml.etree.ElementTree的find 和 findall方法并不是完全支持XPath,不用说XPath2.0,就是连XPath1.0也只是支持了其中的一小部分,可以说只是支持了XPath1.0的一个子集吧。从以下例子能很好的说明这个...
1、from xml.etree import ElementTree as ET
利用ElementTree模块下的xml方法可以把一个字符串类型的东西转换Element类,从而利用Element类下面的方法
xml(字符串)解析方式只能读不能写
from xml.etree import ElementTree as ET
# 打开文件,读取XML内...
                                    DOM解析原理:一次性把xml文档加载Document树,通过Document对象得到节点对象,通过节点对象访问xml文档内容(标签,属性,文本,注释)。 
缺点:不适合读取大容量xml文件,导致内存溢出。xml对象的一些方法:节点:
Iterator  Element.nodeIterator();  //获取当前标签节点下的所有子节点标签:
  Element  Document.getRoo
xml.etree.ElementTree模块实现了一个简单而高效的API用于解析和创建XML数据。xml.etree.ElementTree模块对于恶意构造的数据是不安全的。如果您需要解析不受信任或未经验证的数据,请参阅XML漏洞。
参考文献:https://docs.python.org/3.6/library/xml.etree.elementtree.html