每个element对象都具有以下属性:
1. tag:string对象,表示数据代表的种类。
2. attrib:dictionary对象,表示附有的属性。
3. text:string对象,表示element的内容。
4. tail:string对象,表示element闭合之后的尾迹。
5. 若干子元素(child elements)。
<tag attrib1=1>text</tag>tail
1 2 3 4
在使用xml.etree.ElementTree时,一般都按如下导入:
try: import xml.etree.cElementTree as ET except ImportError: import xml.etree.ElementTree as ET
下面我写的例子: from xml.etree import ElementTree as ET if __name__ == "__main__": infile = "/Users/sunxichao/a.xml" parse_xml = ET.parse(infile) #parse_xml.iter()可以直接形成Element列表进行循环遍历xml文件 #如:for i in parse_xml.iter(): # print i.tag dict = parse_xml.getroot() #获得根节点,我实验的结果是必须得写上 #获得dict的信息: print dict.tag,dict.attrib,dict.tail,dict.text #dict.getchildren(),dict的一级子节点Element构成的列表 # . 当前节点 *匹配所有一级子节点 //匹配所有子节点,包括子子...子节点 iter = dict.find("./array/dict//") #find是寻找到第一个匹配的 iterall=dict.findall("./array/dict//") #findall 匹配所有符合的所有Element构成列表 # "./array/dict/" 只返回符合要求的一级子节点 for i in iter 可以循环iter的一级子节点 iter[0],iter[1]...同样适用 # 只要存在iter[m][n]也适用,如iter[0][0].tag 对Element操作 Element.get(key, default=None) #比如dict.get("name",None), #获取key对应的属性值,如该属性不存在则返回default值 Element.items() #根据属性字典返回一个列表,列表元素为(key, value) Element.keys() #返回包含所有元素属性键的列表 Element.set(key, value) #设置新的属性键与值 Element.clear() #清空元素的后代、属性、text和tail也设置为None a = ET.Element('elem') #生成一个节点,tag = "elem" b = ET.SubElement(a, 'child1') #分别在a下面生成节点b,c c = ET.SubElement(a, 'child2') root.extend((a,)) #把节点a连同附带的子节点一起插入到xml文件,tag="root"下 root.extend((b,c)) #把节点b,c连同各自附带的子节点按照顺序插入到xml文件,tag="root"下
#输出整个文档 inport sys tree = ET.ElementTree(root) tree.write(sys.stdout)
推荐使用::iterparse 方法的使用,遍历整个xml文件 for event,elem in ET.iterparse("a.xml"): if event == "end": #检测闭合标签,elem是Element对象 print "event: " ,event," elem : ",elem.tag 输出结果: event: end elem : key event: end elem : dict event: end elem : array event: end elem : dict