python xml解析实例详解

954次阅读  |  发布于5年以前

python xml解析

first.xml


    <info> 
    <person > 
    <id>1</id> 
    <name>fsy</name> 
    <age >24</age> 
    </person> 
    <person> 
    <id>2</id> 
    <name>jianjian</name> 
    <age>24</age> 
    </person> 
    <count id ='1'>1000</count> 
    </info> 

from xml.etree import ElementTree as etree

读入


    def read_xml(file): 
    # parse()函数会返回一个能代表整篇文档的对象。这不是根元素。要获得根元素的引用可以调用getroot()方法。 
    tree = etree.parse(file) 
    root = tree.getroot() 
    return root 

得到信息


    def print_node(node): 
    '''''打印结点基本信息''' 
    print("node.tag:%s" % node.tag) 
    print("node.attrib:%s"%node.attrib) 
    print( "node.text:%s" % node.text) 

搜索:


    find_all 
    >>> root = read_xml ('first.xml')   
    >>> res = root.findall("person") 
    [<Element 'person' at 0x00000000033388B8>, <Element 'person' at 0x0000000003413D68>] 

    注意:findall只查询直接的子节点 
    >>> r1 = root.findall("id") 
    >>> r1 
    [] 
    >>> r =tree.findall(".//id") 
    >>> for e in r: 
      print( e,e.text) 


    <Element 'id' at 0x00000000034279F8> 1 
    <Element 'id' at 0x0000000003427B38> 2 

find:




    #find()方法用来返回第一个匹配到的元素。当我们认为只会有一个匹配,或者有多个匹配但我们只关心第一个的时候,这个方法是很有用的。 
    >>> res[0].find("id") 
    <Element 'id' at 0x0000000003413CC8> 
    >>> print_node(res[0].find("id")) 
    node.tag:id 
    node.attrib:{} 
    node.text:1 

find查找失败:

使用find要注意在布尔上下文中,如果ElementTree元素对象不包含子元素,其值则会被认为是False(即如果len(element)等于0)。这就意味着if element.find('...')并非在测试是否find()方法找到了匹配项;这条语句是在测试匹配到的元素是否包含子元素。想要测试find()方法是否返回了一个元素,则需使用if element.find('...') is not None。


    >>> bk = res[0].find("no") 
    >>> bk 
    >>> type(bk) 
    <class 'NoneType'> 
    >>> res[0].find("id") 
    <Element 'id' at 0x0000000003413CC8> 
    >>> if res[0].find("id"): 
        print("find") 
      else: 
        print("not find") 
    not find 
    >>> if res[0].find("id") is not None: 
        print("find") 
      else: 
        print("not find") 
    find 


感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8