【Python】xml 解析


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM