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模块的主要内容,如果未能解决你的问题,请参考以下文章

python之模块和包

Python 常用模块学习

python之模块和包

python 模块的概念介绍

Python 八Python模块

Python学习(22):模块