首页 > 代码库 > 6.python序列化功能之xml
6.python序列化功能之xml
<diva_list> <diva name="hamasaki ayumi"> <state flop="yes">1</state> <year>1978</year> <album_sales_volume>27804358</album_sales_volume> <album name="A song for xx" sn="1st"/> <album name="LOVEppears" sn="2nd"/> </diva> <diva name="koda kumi"> <state flop="yes">2</state> <year>1982</year> <album_sales_volume>8273371</album_sales_volume> <album name="affection" sn="1st"/> <album name="grow into one" sn="2nd"/> </diva> </diva_list>
上面是一段xml文本的示例,如果要对xml文本进行处理,需要导入一个模块。
import xml.etree.ElementTree as ET
#由于xml模块的名字太长,使用as给它取了个别名,叫ET。
ET.parse() 从文件中直接读取xml文本,将xml文本解析成为xml树对象。
tree = ET.parse("diva.xml")
获取该xml树的根节点。
root = tree.getroot()
获取根节点的标签(名称)。
root.tag
#遍历xml文档
for child in root:
print(child.tag, child.attrib)
for i in child:
print(i.tag,i.text)
注意!如果想取xml文本下的子节点,必须通过根节点去取,任何节点后面加上.tag都可以取到节点中的标签名,任何节点加上.text都可以取到每个节点包含的内容,attrib 可以取到节点中标签中存在的属性。
#获取每个子节点的album_sales_volume标签中的文本内容。
for i in root.iter("album_sales_volume"):
print i.text
#如果是要获取标签内的属性,直接把text改成attrib即可。
修改:
for node in root.iter(‘year‘):
new_year = int(node.text) + 1
node.text = str(new_year) #修改内容
node.set("flop","no") #修改标签属性。
tree.write("xmltest.xml")
删除:
for country in root.findall(‘country‘):
rank = int(country.find(‘rank‘).text)
if rank > 50:
root.remove(country)
tree.write(‘output.xml‘)
root.findall() 用于从根节点开始查找,查找到指定名字的子节点。
root.remove()用于删除一个节点。
生成xml文本。
import xml.etree.ElementTree as ET
new_xml = ET.Element("namelist")
name = ET.SubElement(new_xml,"name",attrib={"enrolled":"yes"})
age = ET.SubElement(name,"age",attrib={"checked":"no"})
sex = ET.SubElement(name,"sex")
sex.text = ‘33‘
name2 = ET.SubElement(new_xml,"name",attrib={"enrolled":"no"})
age = ET.SubElement(name2,"age")
age.text = ‘19‘
et = ET.ElementTree(new_xml) #生成文档对象
et.write("test.xml", encoding="utf-8",xml_declaration=True)
ET.dump(new_xml) #打印生成的格式
本文出自 “reBiRTH” 博客,请务必保留此出处http://suhaozhi.blog.51cto.com/7272298/1910450
6.python序列化功能之xml