【Python】etree方法生成,解析xml

#练习:另一种遍历xml文件的方式etree,xpath

import sys

try:

import xml.etree.cElementTree as ET #前面带c的都是比较快的,效率高且不占内存的,优先使用这个

except ImportError:

import xml.etree.ElementTree as ET

tree = ET.ElementTree(file='e:\\movie.xml')

root=tree.getroot()

print root.tag #打印根tag

print root.attrib #打印属性

for child_of_root in root:

print child_of_root.tag

print "********", child_of_root.attrib

print "*"*50

print root[0].tag

print root[0].text #“打印的内容为一个回车”

print root[0][0].tag

print root[0][0].text

print root[0][1].tag

print root[0][1].text

print "*"*50

for elem in tree.iter(): #递归遍历所有子元素

print elem.tag, elem.text, elem.attrib #属性返回的是一个字典

print "*"*50

for elem in tree.iterfind('movie/type'): #查找movie下一级节点中的所有type标签

print elem.tag, elem.text,elem.attrib

print "*"*50

for elem in tree.iter(tag='stars'): #在整个树中查找标签为star的元素

print elem.tag, elem.text,elem.attrib

print "*"*50

for elem in tree.iterfind('*[@title="Ishtar"]'): #在下一级节点查找属性为title="Ishtar"的元素

print elem.tag, elem.text,elem.attrib

print "*"*50

for elem in tree.iterfind('movie[@title="Ishtar"]'): #查找属性为title="Ishtar"的元素

print elem.tag, elem.attrib

print "*"*50

root = tree.getroot() #获取第一级movie元素

print "first movie:",root[0].tag #打印第一级movie元素的标签,为movie

print "subnode:",root[0][0].tag #打印第一级movie元素下的第一个子元素标签type

print "subnode:",root[0][1].tag #打印第一级movie元素下的第二个子元素标签format

print "subnode:",root[0][2].tag #打印第一级movie元素下的第三个子元素标签year

print "subnode:",root[0][3].tag #打印第一级movie元素下的第四个子元素标签rating

print "subnode:",root[0][4].tag #打印第一级movie元素下的第五个子元素标签stars

print "subnode:",root[0][5].tag #打印第一级movie元素下的第五个子元素标签description

print "*"*50

del root[0][4] #删除第一级movie元素下的第四个子元素

del root[0][3] #删除第一级movie元素下的第三个子元素

del root[0][2] #删除第一级movie元素下的第二个子元素

del root[0][1] #删除第一级movie元素下的第一个子元素

del root[3] #删除第四个movie元素

del root[2] #删除第三个movie元素

print "*"*50

for subelem in root:

print subelem.tag, subelem.attrib #打印第一个movie和第二个movie元素的标签和属性

print "*"*50

print tree.write(sys.stdout) #将xml文件的内容写到屏幕上

tree.write("e:\\movie.xml") #将变更的xml文件写入到文件中

#练习:生成xml

import sys

try:

import xml.etree.cElementTree as ET

except ImportError:

import xml.etree.ElementTree as ET

a = ET.Element('elem') #生成一个节点elem,没有文本节点

c = ET.SubElement(a, 'child1') #生成一个字节点下的子节点child1

c.text = "some text" #在子节点上添加文本节点

d = ET.SubElement(a, 'child2') #生成一个字节点下的子节点child2

b = ET.Element('elem_b') #生成一个节点elem_b,没有文本节点

root = ET.Element('root') #生成一个节点root

root.extend((a, b)) #将a、b两个变量存储的节点elem和elem1添加到root节点下

tree = ET.ElementTree(root) #生成节点树

root[0].set('foo', 'bar') #设定第一个子元素的属性foo,值为bar

tree.write(sys.stdout) #打印节点树

tree.write("d:\\test.xml") #将xml文件内容写入到文本文件中