Python XML解析之DOM

来源:互联网 发布:复杂网络分析软件 编辑:程序博客网 时间:2024/05/18 11:49

Python XML解析之DOM

解析people.xml:

<?xml  version="1.0"  encoding="utf-8"  ?><people>    <person id="1">        <name>张三</name>        <age>18</age>        <tel>1552644646446</tel>    </person>    <person id="2">        <name>李四</name>        <age>16</age>        <tel>12599897</tel>    </person>    <person id="3">        <name>王五</name>        <age>17</age>        <tel>21245478956</tel>    </person></people>

先创建一个person.py:

class person:    name=None    age=None    tel=None    def __init__(self,name=None,age=None,tel=None):        self.name=name        self.age=age        self.tel=tel    def __repr__(self):        return "{0:20}{1:<5}{2:15}".format(self.name,self.age,self.tel)

1.DOM(Document Object Model)

与SAX比较,DOM典型的缺点是比较慢,消耗更多的内存,解析一些小型xml还可以,因为DOM会将整个XML数读入内存中,并为树
中的第一个节点建立一个对象。使用DOM的好处是你不需要对状态进行追踪,因为每一个节点都知道谁是它的
父节点,谁是子节点。但是DOM用起来有些麻烦。

这里写图片描述

代码如下(如果中间有代码不懂,最下面有解释,希望可以帮到你):

#导入模块from xml.dom.minidom import parsefrom person import personpeople = []#创建一个空列表d=parse('people.xml')#生成document对象print(d)c=d.documentElement#获取根节点peopleprint(c)ps =c.getElementsByTagName("person")#获取根节点下的全部子节点person# p=ps[0]# p1= p.getAttribute("id")#这个是获取username的属性id的数据print(ps)for i in ps: #对数据处理    # name=i.getElementsByTagName("name")[0].firstChild.data#获取tag为name的属性值    # age=int(i.getElementsByTagName("age")[0].firstChild.data)#获取tag为age的属性值并转换成int类型    # tel=i.getElementsByTagName("tel")[0].firstChild.data#获取tag为tel的属性值    name=i.getElementsByTagName("name")[0].childNodes[0].data#获取tag为name的属性值    age=int(i.getElementsByTagName("age")[0].childNodes[0].data)#获取tag为age的属性值并转换成int类型    tel=i.getElementsByTagName("tel")[0].childNodes[0].data#获取tag为tel的属性值    p=person(name,age,tel)    people.append(p)#把获取的值添加到空列表中    print(people)#用lambda表达式以年龄降序输出for p in sorted(people,key=lambda x : x.age , reverse=True):    print(p)print("*********************************")#用lambda表达式以name升序输出people.sort(key=lambda  x : x.name.encode("utf-8"), reverse=False)for p in people:    print(p)

1.mxl.dom.minidom 模块被用来处理xml文件,所以要引入。

2.xml.dom.minidom.parse() 用于加载打开一个xml文件,生成dom对象

3.documentElement 返回xml文档的根节点(就是people)

4.getElementsByTagName(“name”)方法返回带有name标签对象的集合,[0]是集合中第一个]

5.childNodes属性返回节点(比如:name)的子节点集合,[0]是集合中的第一个。
也可以用firstChild 属性,它返回指定节点(比如:name)的首个子节点(上面我把用这个firstChild属性注释掉了)

6..data属性表示获取该节点数据

7.getAttribute方法获取people.xml中的person的id属性的值(我给注释掉了,解析people.xml暂时用不到,我记录一下方便以后学习)

原创粉丝点击