1、 XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签
2、 XML的解析:读取XML数据结构中的某些信息,比如读取书的属性
3、 XML注释格式为:
<!—注释内容-->
4、 CDATA指不应由XML解析器进行解析的文本数据
<![CDATA[“我自己的代码”]]>
5、 Python解析XML的是三种方法
(1) SAX 逐行解析
(2) DOM 对象,一次性读取全部,将内存存储到内存中,将XML存成一棵树
(3) ElementTree
6、 Doc.toxml() 获取xml文档函数,也就是文档内容
7、 xml.dom解析xml常用api
Minidom.parse: 该函数的作用是使用parse解析器打开xml文档,并将其解析为DOM文档,也就是内存中的一棵树,并得到这个DOM对象。
8、 node.hasAttribute()判断属性在不在
9、 node.hasAttribute()获取节点的某个属性值
10、 doc.documentElement获取xml文档对象,就是拿到DOM树的根
11、 node.getElementsByTagName(name)获取XML文档中某个父节点下具有相同节点名的节点对象集合,是一个list对象。
12、 hasChildNodes()判断是否存在叶子结点
13、 node.childNodes返回节点node下所有子节点组成的list
节点:0,2,4,6是回车文本节点;1,3,5是标签节点
#练习:自定义一个xml文件,包含数据库的ip地址,用户名、密码和数据库名称,将它从xml中读取出来,放到一个List里面
from xml.dom.minidom import parse
domtree=parse("e:\ip.xml")
treelist=domtree.documentElement
ipaddress=treelist.getElementsByTagName("ip")
lst=[]
for i in range(1,6,2):
tag_name=ipaddress[0].childNodes[i].tagName
tag_content=ipaddress[0].childNodes[i].childNodes[0].data
lst.append(tag_name+":"+tag_content)
print lst
for i in lst:
print i
#练习:xml解析
#从xml.dom.minidom模块引入解析器parse
from xml.dom.minidom import parse
#minidom解析器打开xml文档并将其解析为内存中的一棵树
DOMTree = parse(r"e:\test.xml")
print type(DOMTree) #instance对象
#获取xml文档对象,就是拿到树的根
booklist = DOMTree.documentElement #DOM对象
print u"DOM树的根对象:",booklist
if booklist.hasAttribute("type") :
#判断根节点booklist是否有type属性
print u"booklist元素存在type属性"
else :
print u"booklist元素不存在type属性"
if booklist.hasAttribute("type") :
#判断根节点booklist是否有type属性,有则获取并打印属性的值
print "Root element is", booklist.getAttribute("type")
print type(booklist.getAttribute("type"))
print u"xml文档内容:\n%s" %DOMTree.toxml()
#获取booklist对象中所有book节点的list集合
books = booklist.getElementsByTagName("book")
print type(books)
print books
print "*"*30
#获取booklist对象中所有author节点的list集合
author=booklist.getElementsByTagName("author")
print author
print "*"*30
#获取所有子节点
print books[0].childNodes
print "*"*30
#获取节点名称和文本放到一个字典中
d={}
for i in range(1,6,2):
tag_name = books[1].childNodes[i].tagName
d[tag_name] = books[1].childNodes[i].childNodes[0].data
print d
for k,v in d.items():
print k,v
print "*"*30
books = booklist.getElementsByTagName("book")
print u"book节点的个数:", books.length
print books[0]
if books[0].hasChildNodes():
print u"存在叶子节点\n", books[0].childNodes
else :
print u"不存在叶子节点"
print "*"*30
#练习:xml解析
from xml.dom.minidom import parse
import xml.dom.minidom
# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse(r"e:\\movie.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
print "Root element : %s" % collection.getAttribute("shelf")
# 在集合中获取所有电影
movies = collection.getElementsByTagName("movie")
# 打印每部电影的详细信息
for movie in movies:
print "*****Movie*****"
if movie.hasAttribute("title"):
print "Title: %s" % movie.getAttribute("title")
type = movie.getElementsByTagName('type')[0] #[0]表示第一个title标签,因为一个<book>...</book>之间可能会
#定义多个title标签
print "Type: %s" % type.childNodes[0].data
format = movie.getElementsByTagName('format')[0]
print "Format: %s" % format.childNodes[0].data
rating = movie.getElementsByTagName('rating')[0]
print "Rating: %s" % rating.childNodes[0].data
description = movie.getElementsByTagName('description')[0]
print "Description: %s" % description.childNodes[0].data