阅读目录

  • 1. 什么是xml?有何特征?
  • 2. 获得标签属性
  • 3. 获得子标签
  • 4. 获得标签属性值
  • 5. 获得标签对之间的数据
  • 6. 例子
  • 7. 总结
回到顶部

1. 什么是xml?有何特征?

xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

例子:del.xml

<?xml version="1.0" encoding="utf-8"?>
<catalog> <maxid>4</maxid> <login username="pytest" passwd='123456'> <caption>Python</caption> <item id="4"> <caption>test</caption> </item> </login> <item id="2"> <caption>Zope</caption> </item> </catalog>

从结构上,很像HTML超文本标记语言。但他们被设计的目的是不同的,超文本标记语言被设计用来显示数据,其焦点是数据的外观。它被设计用来传输存储数据,其焦点是数据的内容

那么它有如下特征:

  • 它是有标签对组成,<aa></aa>
  • 标签可以有属性:<aa id='123'></aa>
  • 标签对可以嵌入数据:<aa>abc</aa>
  • 标签可以嵌入子标签(具有层级关系)
回到顶部

2. 获得标签属性

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") #打开xml文档  root = dom.documentElement #得到xml文档对象 print "nodeName:", root.nodeName #每一个结点都有它的nodeName,nodeValue,nodeType属性 print "nodeValue:", root.nodeValue #nodeValue是结点的值,只对文本结点有效 print "nodeType:", root.nodeType print "ELEMENT_NODE:", root.ELEMENT_NODE

nodeType是结点的类型。catalog是ELEMENT_NODE类型

现在有以下几种:

1
2
3
4
5
6
7
8
9
10
11
12
'ATTRIBUTE_NODE'
'CDATA_SECTION_NODE'
'COMMENT_NODE'
'DOCUMENT_FRAGMENT_NODE'
'DOCUMENT_NODE'
'DOCUMENT_TYPE_NODE'
'ELEMENT_NODE'
'ENTITY_NODE'
'ENTITY_REFERENCE_NODE'
'NOTATION_NODE'
'PROCESSING_INSTRUCTION_NODE'
'TEXT_NODE'

运行结果

1
2
3
4
nodeName: catalog
nodeValue: None
nodeType: 1
ELEMENT_NODE: 1

回到顶部

3. 获得子标签

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") root = dom.documentElement bb = root.getElementsByTagName('maxid') print type(bb) print bb b = bb[0] print b.nodeName print b.nodeValue

运行结果

1
2
3
4
<class 'xml.dom.minicompat.NodeList'>
[<DOM Element: maxid at 0x2707a48>]
maxid
None

回到顶部

4. 获得标签属性值

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") root = dom.documentElement itemlist = root.getElementsByTagName('login') item = itemlist[0] print item.getAttribute("username") print item.getAttribute("passwd") itemlist = root.getElementsByTagName("item") item = itemlist[0] #通过在itemlist中的位置区分 print item.getAttribute("id") item2 = itemlist[1] #通过在itemlist中的位置区分
print item2.getAttribute("id")

运行结果

1
2
3
4
pytest
123456
4
2

回到顶部

5. 获得标签对之间的数据

#coding: utf-8
import xml.dom.minidom
dom = xml.dom.minidom.parse("del.xml") root = dom.documentElement itemlist = root.getElementsByTagName('caption') item = itemlist[0] print item.firstChild.data item2 = itemlist[1] print item2.firstChild.data

运行结果

1
2
Python
test

回到顶部

6. 例子

<?xml version="1.0" encoding="UTF-8" ?>
<users> <user id="1000001"> <username>Admin</username> <email>admin@live.cn</email> <age>23</age> <sex>boy</sex> </user> <user id="1000002"> <username>Admin2</username> <email>admin2@live.cn</email> <age>22</age> <sex>boy</sex> </user> <user id="1000003"> <username>Admin3</username> <email>admin3@live.cn</email> <age>27</age> <sex>boy</sex> </user> <user id="1000004"> <username>Admin4</username> <email>admin4@live.cn</email> <age>25</age> <sex>girl</sex> </user> <user id="1000005"> <username>Admin5</username> <email>admin5@live.cn</email> <age>20</age> <sex>boy</sex> </user> <user id="1000006"> <username>Admin6</username> <email>admin6@live.cn</email> <age>23</age> <sex>girl</sex> </user> </users>

把name、email、age、sex输出

参考代码

# -*- coding:utf-8 -*-
from xml.dom import minidomdef get_attrvalue(node, attrname): return node.getAttribute(attrname) if node else '' def get_nodevalue(node, index = 0): return node.childNodes[index].nodeValue if node else '' def get_xmlnode(node, name): return node.getElementsByTagName(name) if node else [] def get_xml_data(filename = 'user.xml'): doc = minidom.parse(filename) root = doc.documentElement user_nodes = get_xmlnode(root, 'user') print "user_nodes:", user_nodes user_list=[] for node in user_nodes: user_id = get_attrvalue(node, 'id') node_name = get_xmlnode(node, 'username') node_email = get_xmlnode(node, 'email') node_age = get_xmlnode(node, 'age') node_sex = get_xmlnode(node, 'sex') user_name =get_nodevalue(node_name[0]) user_email = get_nodevalue(node_email[0]) user_age = int(get_nodevalue(node_age[0])) user_sex = get_nodevalue(node_sex[0]) user = {} user['id'] , user['username'] , user['email'] , user['age'] , user['sex'] = ( int(user_id), user_name , user_email , user_age , user_sex ) user_list.append(user) return user_list def test_load_xml(): user_list = get_xml_data() for user in user_list : print '-----------------------------------------------------' if user: user_str='No.:\t%d\nname:\t%s\nsex:\t%s\nage:\t%s\nEmail:\t%s' % (int(user['id']) , user['username'], user['sex'] , user['age'] , user['email']) print user_str if __name__ == "__main__": test_load_xml()

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
C:\Users\jihite\Desktop\xml>python user.py
user_nodes: [<DOM Element: user at 0x2758c48>, <DOM Element: user at 0x2756288>,
 <DOM Element: user at 0x2756888>, <DOM Element: user at 0x2756e88>, <DOM Elemen
t: user at 0x275e4c8>, <DOM Element: user at 0x275eac8>]
-----------------------------------------------------
No.:    1000001
name:   Admin
sex:    boy
age:    23
Email:  admin@live.cn
-----------------------------------------------------
No.:    1000002
name:   Admin2
sex:    boy
age:    22
Email:  admin2@live.cn
-----------------------------------------------------
No.:    1000003
name:   Admin3
sex:    boy
age:    27
Email:  admin3@live.cn
-----------------------------------------------------
No.:    1000004
name:   Admin4
sex:    gril
age:    25
Email:  admin4@live.cn
-----------------------------------------------------
No.:    1000005
name:   Admin5
sex:    boy
age:    20
Email:  admin5@live.cn
-----------------------------------------------------
No.:    1000006
name:   Admin6
sex:    gril
age:    23
Email:  admin6@live.cn 

回到顶部

7. 总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
minidom.parse(filename)
加载读取XML文件
doc.documentElement
获取XML文档对象
node.getAttribute(AttributeName)
获取XML节点属性值
node.getElementsByTagName(TagName)
获取XML节点对象集合
node.childNodes #返回子节点列表。
node.childNodes[index].nodeValue
获取XML节点值
node.firstChild
#访问第一个节点。等价于pagexml.childNodes[0]
doc = minidom.parse(filename)
doc.toxml('UTF-8')
返回Node节点的xml表示的文本
Node.attributes["id"]
a.name #就是上面的 "id"
a.value #属性的值
访问元素属性

转载于:https://www.cnblogs.com/roboot/p/9563954.html

python xml.dom模块解析xml相关推荐

  1. python xml.dom模块解析xml

    1. 什么是xml?有何特征? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 例子:del.xml <?xml version=&q ...

  2. python 之模块之 xml.dom.minidom解析xml

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...

  3. 「Python」 ElementTree模块解析xml文件,建议小白阅读全文

    背景 Python有三种方法解析xml:SAX,DOM,Elementree.本文记录ElementTree方法解析xml. 目前自己用的是Python3.6,但在该版本中并没有xml的缩进函数ET. ...

  4. 【XML DOM】解析XML Dom

    现在浏览器都内建了用于读取和操作XML的XML解释器. 解释器把XML读入内存,并把它转换为可被js访问的XML DOM对象. 解析器都含遍历XML树,访问,插入及删除节点的函数. 本节主要讲解如何创 ...

  5. python【模块】xml.etree.ElementTree 解析 xml

    pytho 模块 xml.etree.ElementTree 解析 xml 文章目录 pytho 模块 xml.etree.ElementTree 解析 xml 1. 什么是 XML? 2. Elem ...

  6. python生成xml界面,Python如何用dom模块生成XML文

    Python如何用dom模块生成XML文件呢? 主要方法三点: 首先.生成XML节点(node) createElement("node_name") 然后.给节点添加属性值(At ...

  7. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  8. java 获取xml 版本号_java解析xml获取对应值

    importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.x ...

  9. (C++)将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法

    将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法 思路:将数据库所有要导出的信息通过sql语句得到,存储到结构体中,然后将结构体的内容通过自定义的xml格式导出. 此方法使用的是T ...

最新文章

  1. 如何才能正确的关闭Socket连接
  2. 下面首先来看GCD的使用
  3. Android移动开发之【Android实战项目】DAY15-翻页效果原理
  4. java立方表示方法
  5. Excel 打开csv显示在一个单元格
  6. Maven(6)--archetype
  7. c语言开发工具程序代码是什么文件,【C语言】开发工具--GCC使用入门
  8. [前台]---js中去掉双引号或者单引号
  9. rsatool使用步骤图解_工作中想要事半功倍?图解来助你
  10. 怎么用python爬图片_如何用Python来制作简单的爬虫,爬取到你想要的图片
  11. position绝对定位后,a中使用display:block 无效的解决办法
  12. 8月5日发布卡巴斯基授权许可key-卡巴斯基key
  13. 一、Maven-单一架构案例(创建工程,引入依赖,搭建环境:持久化层,)
  14. hdu 1880 魔咒字典
  15. 笔记丨利用gitee创建个人博客网站
  16. 项目管理:目标的价值表现的四个方面
  17. std.h对应linux头文件,bits/stdc++.h头文件介绍(包含源代码)
  18. 戴尔微型计算机电池位置,转:戴尔笔记本电池拆解教程-看看电池内部的样子
  19. Java查漏补缺之Java8新特性
  20. 从邮箱到云客服,SaaS行业发展到哪种程度了?

热门文章

  1. 数量查看_正则表达式学习之分割字符及数量词练习
  2. win10 后台运行jar包_小编演示win10系统双击运行jar文件的教程
  3. python的特性注定了代码无法保密_python 基础
  4. android studio 单元测试用法,基于Android Studio2.1.1 进行单元测试完整教程
  5. 广西国际商务职业技术学院官网计算机功课,2019—2020学年秋季学期线上线下混合式教学课程听课情况汇报...
  6. typecho 去掉index.php,Typecho设置伪静态去掉url中的index.php
  7. 数据库不可重复读和幻读的区别
  8. Java杂记3—流程控制之条件 1
  9. Derby安装使用说明
  10. [原创]如何从数据库层面检测两表内容的一致性