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。

原文地址:https://www.cnblogs.com/TianMG/p/3080874.html