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暂时用不到,我记录一下方便以后学习)
阅读全文
0 0
- Python XML解析之DOM
- python 解析XML xml.dom
- python 解析XML xml.dom
- python 解析XML xml.dom
- python 解析XML xml.dom
- python 解析XML xml.dom
- 解析xml之--DOM
- xml解析之Dom
- XML解析之 DOM
- XML解析之Dom
- XML解析之DOM
- XML解析之Dom
- XML解析之DOM
- 解析XML之DOM
- xml之dom解析
- xml解析之dom
- XML之DOM解析
- xml解析之DOM
- redis 第一篇(redis服务器搭建安装)
- javascript---bind的实现方法
- 美团-平均年龄-Java
- react近期总结
- 命名空间
- Python XML解析之DOM
- 浅析结构体
- android app记录运行日志 捕获奔溃异常 ,存储日志到文件
- c++ stream
- bzoj4503 两个串
- servlet中的几个类--ServletConfig&ServletContext(页面访问量的功能实现)
- Mac配置php.ini文件,连接mysql数据库
- C++中new和molloc的区别
- 【Java-1】写代码前的准备工作