xml模块

Posted hexiaoqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml模块相关的知识,希望对你有一定的参考价值。

xml模块

xml是可扩展标记语言和html类似,用来传输和储存数据,python里面的处理XML数据的模块为xml.etree.ElementTree,ElementTree的意思是节点树,二Element带便一个单独的节点。

xml数据由标签作为标记而标又有两种。

自闭合标签(有头有尾):<age>2</age>

非闭合标签(有头无尾):<husband age="5" name="Mary" />

看一段下面的xml数据:

 

<data>
    <animals name="Tom">
        <age>2</age>
        <b_year>2010</b_year>
        <weight>20</weight>
        <husband age="10" name="Alex" />
    </animals>
    <animals name="Bob">
        <age>3</age>
        <b_year>2012</b_year>
        <weight>15</weight>
        <husband age="5" name="Mary" />
    </animals>
    <animals name="Chirwy">
        <age>4</age>
        <b_year>2008</b_year>
        <weight>25</weight>
        <husband age="3" name="Ared" />
    </animals>

</data>

 

1.导入xml模块和解析xml文件

1 import xml.etree.ElementTree as ET
2 
3 tree = ET.parse(XML_data)    #使用parse方法解析XML_data得到xlm数据树,把它赋值给tree得到一个对象,接下来直接操作此对象
4 root = tree.getroot()    #得到根节点
5 print(root)              #打印根节点的内存地址
6 print(root.tag)          #tag方法打印根结点的标签名称

2.查看其他节点及其名称

 1 import xml.etree.ElementTree as ET
 2 
 3 tree = ET.parse(XML_data)    #使用parse方法解析XML_data得到xlm数据树,把它赋值给tree得到一个对象,接下来直接操作此对象
 4 root = tree.getroot()    #得到根节点
 5 print(root)              #打印根节点的内存地址
 6 print(root.tag)          #tag属性打印根结点的标签名称
 7 
 8 for i in root:
 9     print("子节点",i.tag)
10     for j in i:
11         print("孙节点", j.tag)

结果:

子节点 animals
孙节点 age
孙节点 b_year
孙节点 weight
孙节点 husband
子节点 animals
孙节点 age
孙节点 b_year
孙节点 weight
孙节点 husband
子节点 animals
孙节点 age
孙节点 b_year
孙节点 weight
孙节点 husband

3.获得标签里面的属性

1 for m in root:
2     print(m.attrib)
{name: Tom}
{name: Bob}
{name: Chirwy}

4.标签里面包含的文本内容

1 for m in root:
2     for n in m:
3         print(n.text)
2
2010
20
None
3
2012
15
None
4
2008
25
None

5.若想取到特定标签中的值,可以使用iter()方法

1 for n in root.iter("b_year"):
2     print(n.tag,n.text)
b_year 2010
b_year 2012
b_year 2008

6.修改xml数据

set()方法可以给标签添加新的属性

1 for n in root.iter("b_year"):
2     new_year=int(n.text)+1
3     n.text=str(new_year)#修改b_year标签的text属性
4     n.set("updated1","yes")#给year这个标签增加一个属性
5 tree.write("xml_data1.xml")#直接把修改的写入到文件中

第五行中的文件名可以使用原来的文件名字相当于覆盖更新,他也可以使用其他的名称,相当于又创建了一个新的xml文件。

7.删除标签使用remove()方法,使用方法和6一样

8.通过模块创建xml文件

1 import xml.etree.ElementTree as ET     #导入模块
2 new_xml = ET.Element(Student)     #创建根节点
3 name = ET.SubElement(new_xml, name, attrib={"GPA":4.5}) #创建子节点
4 age = ET.SubElement(name, age,attrib={isOK:ok})       #创建孙节点
5 sex = ET.SubElement(name, sex)                #创建孙节点
6 sex.text = 28                                 #添加标签内容
7 
8 et = ET.ElementTree(new_xml)            #生成文件对象
9 et.write(test.xml, encoding=utf-8,xml_declaration=True)     #生成对象

结果:

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<Student>
    <name GPA="4.5">
        <age isOK="ok" />
        <sex>28</sex>
    </name>
</Student>

 

以上是关于xml模块的主要内容,如果未能解决你的问题,请参考以下文章

xml Eclipse模板(代码片段)检查参数并最终抛出IllegalArgumentException

需要示例代码片段帮助

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

如何有条件地将 C 代码片段编译到我的 Perl 模块?

具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包

创建片段而不从 java 代码实例化它