zoukankan      html  css  js  c++  java
  • python xml.etree解析xml

    config.xml

    <?xml version="1.0" encoding="UTF-8"?>
     <employees> 
      <employee> 
        <name lang='en'>linux</name>  
        <age>30</age>
      </employee>
      <employee> 
        <name>windows</name>
        <age>20</age>
      </employee>
     </employees>
    

      

    1 ,解析出xml文件的根元素

    from xml.etree import ElementTree as ET
    
    tree=ET.parse('config.xml') 
    root=tree.getroot()
    

      或者  (从字符串中解析) 

    root = ET.fromstring(country_data_as_string)
    

     tree=ET.parse('config.xml')  #tree为ElementTree 类型

      root=tree.getroot()或root = ET.fromstring(country_data_as_string) #root为Element类型

    2   以root为根元素开始解析:主要使用Element的方法

      Element.iter()遍历他所有的后代元素(包括其自己)。

    nodes = root.iter()
    for i in nodes:
        print i.tag
    
    
    结果:
    employees
    employee
    name
    age
    employee
    name
    age
    

      Element.iter("employee") :返回所有的employee元素,通常用于找到employee元素的attrib或者text  

    nodes = root.iter('name')
    for i in nodes:
        print i.text
    
    
    结果:
    linux
    windows
    

      Element.findall(tagname): 查询所有标签名为tagname的子元素

      Element.find(tagname):查询第一个标签名为tagname的元素

      Element.get("lang"): 获取Element元素的lang的属性值

    for e in root.findall('employee'):
        name = e.find('name').text
        lang = e.find('name').get('lang')
        print name,lang
    
    结果:
    linux en
    windows None
    

      

    Element Objects:

    tag :元素标签名

    text:元素标签的文本值,即两个变签名之间的文本值。

    tail:该元素后一个标签名到下一个标签名之间的文本部分

    attrib:返回一个字典结构,属性名:属性值 {'lang': 'en', 'price': '21'}

    get(keydefault=None):返回该元素名为key的属性值,如果该属性为找到,则返回default(None)。

    items():返回该元素所有的(属性,属性值),返回一个列表,列表里每一项为(属性,属性值)。[('lang', 'en'), ('price', '21')]

    keys():返回一个列表,每一项为该元素的属性名 。['lang', 'price']

    findall(match):match 为tag name 或 xpath。通过tag name 或者xpath去查找符合的所有子元素,返回一个列表,包含按文档顺序的子元素对象。子元素不包括孙元素一下的后代元素

    find(match):通过tag name 或者xpath去查找符合的第一个子元素,返回一个元素对象或者None。

    findtext(matchdefault=None):match 为tag name 或 xpath。查找一个符合match的资源的text。返回找到的文本内容或者没找到返回default

    iter(tag=None) :Creates a tree iterator with the current element as the root。The iterator可以迭代该元素和所有的后代元素(按文档出现的先后顺序)。若果tag不是None或者‘*’,返回所有tag=tag的元素对象。

    iterfind(match):Finds all matching subelements, by tag name or path. Returns an iterable yielding all matching elements in document order。返回值为不懂,一般也不用。

    itertext():Creates a text iterator. The iterator loops over this element and all subelements, in document order, and returns all inner text。生成一个文本迭代器,他按文档出现顺序遍历自己和所有的子元素,返回所有的文本值,包含空格和换行。

    text = root.itertext()
    for i  in text:
        print i
    

      

    makeelement(tagattrib)

    remove(subelement):Removes subelement from the element。

    clear() :清除该元素的所有子元素和属性,设定text和attrib的值为None。

    insert(indexelement):在该元素子元素的指定的位置插入一个子元素。

    set(keyvalue)  :Set the attribute key on the element to value.把元素的key属性设置为value。

    append(subelement):Adds the element subelement to the end of this elements internal list of subelements

    extend(subelements):Appends subelements from a sequence object with zero or more elements. Raises AssertionError if a subelement is not a valid object.

    __delitem__()__getitem__()__setitem__()__len__()

    element = root.find('foo')
    
    if not element:  # careful!
        print "element not found, or element has no subelements"
    
    if element is None:
        print "element not found"
    

      

     xml.etree.ElementTree.fromstring(text) :从一个字符串中获取ElementTree的跟元素,返回值为Element。

  • 相关阅读:
    CSS
    iframe自适应宽度和高度
    用css实现文字超出指定宽度显示省略号(...)
    删除数据时的提示效果(遮罩)
    网页选项卡的应用
    列表应用(导航菜单)
    下拉列表框中的事件应用(联动展示数据)
    jQuery移除事件
    toggle()方法
    jQuery切换事件
  • 原文地址:https://www.cnblogs.com/TianMG/p/3080874.html
Copyright © 2011-2022 走看看