三、关于Python Minidom 四、开始用pyhton读取xml文件
--------------------------------------------------------------------------------------------------------------------------
一、什么是XML
XML指可扩展标记语言;
它的设计宗旨是传输数据,而不是显示数据;(ps:不要指望 XML 文件会直接显示为 HTML 页面,XML 文档不会携带有关如何显示数据的信息)
标签没有被预定义,需要自行定义标签
对它最好的描述是:独立于软件和硬件的信息传输工具
三、关于Python Minidom
(ps: 网上找到有关Minidom的详解比较少,大多都是实例。但这里贴个Python官方的介绍地址-->
https://wiki.python.org/moin/MiniDom
)
用Minidom在XML文件中读取到的信息,可以看做是一个主结构,根据XML文件标签的结构层次,构成了树的结构。
树中每一个节点有三种基本属性:
根
名.nodeName为节点标签的名字。比如<aa>标签的nodeName为aa
根名.nodeValue是节点的值,只对文本结点有效。
根名.nodeType是节点的类型(W3C有关XML的介绍中有节点类型的具体阐述-->
http://www.w3school.com.cn/xmldom/dom_nodetype.asp
)
四、开始使用Python读取XML文件
1. 首先,建立一个测试用的XML文件,名为“123.xml”,比较简单,代码如下:
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <catalog>
3 <aa value="first">this is the 1st.</aa>
4 <aa value="second">this is the 2nd.</aa>
5 </catalog>
2. 在同一个目录下,建立一个名为“xml_read.py”的文件
首先要导入minidom类库,导入方式有两种,对应的打开XML文件的语句也稍有不同。
第一种:
1 #导入类库
2 import xml.dom.minidom
3 #使用minidom里的parse()函数打开xml文档
4 dom = xml.dom.minidom.parse('123.xml')
1 #导入类库
2 from xml.dom import minidom
3 #使用minidom里的parse()函数打开文件
4 doc = minidom.parse('123.xml')
导入类库并成功打开XML文件后,要获取根节点,这里的“documentElement”有点像HTML语言里的使用:
1 root = dom.documentElement
先试试将根节点相关的三种基本属性显示出来,代码如下:
1 print root.nodeName
2 print root.nodeValue
3 print root.nodeType
“xml_read.py”的完整代码 以及 实验效果如下:
1 #coding=utf-8
3 #导入类库
4 import xml.dom.minidom
6 #使用minidom里的parse()函数打开xml文档
7 dom = xml.dom.minidom.parse('123.xml')
9 root = dom.documentElement
10 #每一个节点都有它的 nodeName、nodeValue、nodeType属性
11 print root.nodeName
12 print root.nodeValue
13 print root.nodeType
效果如下:
---------------------------------------------------------------------------------------------------------------------
刚刚演示的是对根节点的基本属性显示,下面演示怎么获取子元素的相关信息。
对于知道元素名字的子元素,可以使用getElementsByTagName方法获取,由该方法返回的是一个list,因此需要用循环来读出“123.xml”子标签的内容:
修改后的“xml_read.py”的完整代码如下:
1 #coding=utf-8
3 #导入类库
4 import xml.dom.minidom
6 #使用minidom里的parse()函数打开xml文档
7 dom = xml.dom.minidom.parse('123.xml')
9 root = dom.documentElement
10 nodes= root.getElementsByTagName("aa")
11 for n in nodes:
12 print n.getAttribute("value") #获取属性值
13 print n.childNodes[0].data #获取文本值
结果显示如下:
这只是我的第一个实例尝试,也希望自己之后能够坚持练习,多去发现问题解决问题,逐步提高自己~