python ElementTree

每个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





你可能感兴趣的:(python ElementTree)