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(key, default=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(match, default=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(tag, attrib)
remove(subelement):Removes subelement from the element。
clear() :清除该元素的所有子元素和属性,设定text和attrib的值为None。
insert(index, element):在该元素子元素的指定的位置插入一个子元素。
set(key, value) :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。