python模块-xml模块
Posted forever77
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python模块-xml模块相关的知识,希望对你有一定的参考价值。
xml是实现不同语言或程序之间数据交换的协议,类似json,比json出现得更早。
如下一个名为xml_test的文件,下面的操作都对这个文件进行
<date>和</date>、<country>和</country>、<year>和</year>等成对出现的为非闭合标签,而<neighbor>是自闭合标签,自闭合标签没有值也没有子标签
<data> <country name="Liechtenstein"> <rank updated="yes">2</rank> #rank为标签tag,update为标签的属性attribute,yes为属性的值,2为标签的值text <year>2010</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2013</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2013</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
导入xml模块并获取根节点
import xml.etree.ElementTree as ET #导入模块名称较长时可以取别名 tree = ET.parse("xml_lesson") #获取根节点 root = tree.getroot() #获取根节点标签 print(root.tag)
遍历整个文档
for child in root: print(child.tag, child.attrib) #获取子节点标签、属性 for i in child: print(i.tag, i.attrb, i.text) #获取子节点的子节点的标签、属性和值
只遍历year节点
for node in root.iter(‘year‘): print(node.tag, node.text)
修改year节点
for node in root.iter(‘year‘): new_year = int(node.text) + 1 #将year节点的值转换为int,再加1 node.text = str(new_year) #将上述计算得到新的值转换为字符串重新赋给year节点的值 node.set("updated", "yes") #给year节点增加属性update,属性值为yes tree.write("xml_test") #将上述修改和增加写入文档,此处可写入一个新的文档,也可写入原文档
删除指定节点
for country in root.findall(‘country‘): #查找root下的所有country节点 rank = int(country.find(‘rank‘).text) #查找country节点下的rank节点,并获取rank节点的值 if rank > 50: root.remove(country) #如果节点的值大于50,则删除整个country节点 tree.write(‘output.xml‘) #将上述操作写入文档
通过python语句生成xml文档
import xml.etree.ElementTree as ET new_xml = ET.Element("namelist") #生成名为new_xml的文档,根节点标签为namelist name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"}) #生成new_xml的子节点,子节点标签为name,属性为enrolled,属性值为yes age = ET.SubElement(name, "age", attrib={"checked": "no"}) #生成name的子节点,标签为age,属性为checked,属性值为no sex = ET.SubElement(name, "sex") #生成name的子节点,标签为sex sex.text = ‘33‘ #set标签的值为‘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) # 打印生成的格式
通过上述命令生成的new_xml文件的内容如下
<namelist> <name enrolled=‘yes‘> <age checked=‘no‘> <sex>33</sex> </name> <name enrolled=‘no‘> <age>19</age> </name> </namelist>
以上是关于python模块-xml模块的主要内容,如果未能解决你的问题,请参考以下文章