• Python-elementTree方法解析xml文件-01


    【XML基本概念介绍】

    XML 指可扩展标记语言(eXtensible Markup Language)。
    XML 被设计用来传输和存储数据。
    概念一:

    <foo>      # foo元素的起始标签  
    </foo>     # foo元素的结束标签  
                 # note: 每一个起始标签必须有对应的结束标签来闭合, 也可以写成<foo/>

    概念二:

    <foo>           # 元素可以嵌套到任意参次  
       <bar></bar>   # bar元素为foo元素的子元素  
    </foo>           # 父元素foo的结束标签

    概念三:

    <foo lang='EN'>#foo元素有个lang的属性,该属性值为:EN 对应Python字典Name-Value对                              
       <bar id='001' lang="CH"></bar> # bar元素有个lang的属性,该属性值为:CH;还有个id属性,值为:001,放置在''或“”中;   
     </foo> # bar元素中的lang属性不会和foo元素中相冲突,每个元素都有独立的属性集;

    概念四:

    <title>Learning Python</title> # 元素可以有文本内容  
    # Note:如果一个元素即没有文本内容,也没有子元素,则为空元素。

    概念五:

    <info>   # info元素为根节点  
         <list id='001'> A </list> # list元素为子节点  
         <list id='002'> B </list>   
         <list id='003'> C </list>  
     </info>

    概念六:

    <feed xmlns='http://www.w3.org/2005/Atom'>#可以通过声明xmlns来定义默认名字空间,feed元素处于http://www.w3.org/2005/Atom命名空间中  
       <title>dive into mark</title>#title元素也是。名字空间声明不仅会作用于当前声明它的元素,还会影响到该元素的所有子元素  
    </feed>#也可以通过xmlns:prefix声明来定义一个名字空间并取其名为prefix。然后该名字空间中的每个元素都必须显式地使用这个前缀(prefix)来声明。
    <atom:feed xmlns:atom='http://www.w3.org/2005/Atom'> # feed属于命名空间atom  
       <atom:title>dive into mark</atom:title>#title元素同样属于该命名空间             
    </atom:feed> # xmlns(XML Name Space)

    【ElementTree解析】

    两种实现

    ElementTree生来就是为了处理XML ,它在Python标准库中有两种实现。
    一种是纯Python实现,例如: xml.etree.ElementTree
    另外一种是速度快一点的:   xml.etree.cElementTree
    尽量使用C语言实现的那种,因为它速度更快,而且消耗的内存更少! 在程序中可以这样写:

    try:  
         import xml.etree.cElementTree as ET  
     except ImportError:  
         import xml.etree.ElementTree as ET

    常用方法

    # 当要获取属性值时,用attrib方法。  
    # 当要获取节点值时,用text方法。  
    # 当要获取节点名时,用tag方法。

    示例XML

    <?xml version="1.0" encoding="utf-8"?>  
     <info>  
        <intro>Book message</intro>  
         <list id='001'>  
             <head>bookone</head>  
             <name>python check</name>  
             <number>001</number>  
             <page>200</page>  
         </list>  
         <list id='002'>  
             <head>booktwo</head>  
             <name>python learn</name>  
             <number>002</number>  
             <page>300</page>  
         </list>  
     </info>

    加载XML

    root = ET.parse(‘book.xml’)

    加载字符串

    root = ET.fromstring(xmltext)

    获得指定节点:

    方法一:获得指定节点->getiterator()方法

    book_node = root.getiterator('list')

    方法二:获得指定节点->findall()方法

    book_node = root.findall('list') 

    方法三:获得指定节点->find()方法

    book_node = root.find('list') 

    方法四:获得儿子节点->getchildren()

    for node in book_node: 
        book_node_child = node.getchildren()[0] 
        print book_node_child.tag, '=> ', book_node_child.text

    示例:

    try:
        import xml.etree.cElementTree as ET
    except ImportError:
        import xml.etree.cElementTree as ET
    
    root = ET.parse(r'I:PythonTestook.xml') #加载文件
    books = root.findall('./list')
    for book_list in books:
        print('='*30)
        for book in book_list:
            if id in book.attrib :
                print('id:',book.attrib['id'])
            print(book.tag + '==>' + book.text)
    print('='*30)

    输出结果:

    ==============================
    head==>bookone
    name==>python check
    number==>001
    page==>200
    ==============================
    head==>booktwo
    name==>python learn
    number==>002
    page==>300
    ==============================

    转自:http://www.jb51.net/article/67120.htm

  • 相关阅读:
    dubbo服务配置
    架构基本概念和架构本质
    最大子数组和问题
    struts2简单登陆页面
    四则运算随机出题
    省赛训练赛赛题(简单题)
    Ubuntu虚拟机安装,vritualbox虚拟机软件的使用
    Rational Rose 2007破解版
    netbeans出现的错误
    快速幂
  • 原文地址:https://www.cnblogs.com/rusking/p/5107934.html
Copyright © 2020-2023  润新知