Python XML解析之DOM

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 parse
from person import person

people = []#创建一个空列表
d=parse('people.xml')#生成document对象
print(d)
c=d.documentElement#获取根节点people
print(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暂时用不到,我记录一下方便以后学习)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值