国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python存取XML的常見方法實例分析

2020-02-23 04:26:28
字體:
來源:轉載
供稿:網友

本文實例講述了Python存取XML的常見方法。分享給大家供大家參考,具體如下:

目前而言,Python 3.2存取XML有以下四種方法:

1.Expat
2.DOM
3.SAX
4.ElementTree

以以下xml作為討論依據

<?xml version="1.0" encoding="utf-8"?><Schools>  <School Name="XiDian">    <Class Id="030612">      <Student Name="salomon">        <Scores>          <Math>98</Math>          <English>85</English>          <physics>89</physics>        </Scores>      </Student>      <Student Name="Jupiter">        <Scores>          <Math>74</Math>          <English>83</English>          <physics>69</physics>        </Scores>      </Student>    </Class>    <Class Id="030611">      <Student Name="Venus">        <Scores>          <Math>98</Math>          <English>85</English>          <physics>89</physics>        </Scores>      </Student>      <Student Name="Mars">        <Scores>          <Math>74</Math>          <English>83</English>          <physics>69</physics>        </Scores>      </Student>    </Class>  </School></Schools>

Expat

Expat是一個面向流的解析器。您注冊的解析器回調(或handler)功能,然后開始搜索它的文檔。當解析器識別該文件的指定的位置,它會調用該部分相應的處理程序(如果您已經注冊的一個)。該文件被輸送到解析器,會被分割成多個片斷,并分段裝到內存中。因此expat可以解析那些巨大的文件。

SAX

SAX是個循序存取XML的解析器API,一個實現SAX的解析器(也就是“SAX Parser”)以一個串流解析器的型式作用,擁有事件驅動API。由使用者定義回調函數,解析時,若發生事件的話會被調用。事件在任一XML特性遇到時引發,以及遇到他們結尾時再次引發。XML屬性也作為傳給元素事件資料的一部分。SAX 處理時單方向性的;解析過的資料無法在不重新開始的情況下再次讀取。

DOM

DOM解析器在任何處理開始之前,必須把整棵樹放在內存,所以DOM解析器的內存使用量完全根據輸入資料的大小(相對來說,SAX解析器的內存內容,是只基于XML檔案的最大深度(XML樹的最大深度)和單一XML項目上XML屬性儲存的最大資料)。

DOM在python3.2中有兩種實現方式:

1.xml.minidom是一個基本的實現。
2.xml.pulldom只在需要時構建被訪問的子樹。

'''Created on 2012-5-25@author: salomon'''import xml.dom.minidom as minidomdom = minidom.parse("E://test.xml")root = dom.getElementsByTagName("Schools") #The function getElementsByTagName returns NodeList.print(root.length)for node in root:   print("Root element is %s。" %node.tagName)# 格式化輸出,與C系列語言有很大區別。  schools = node.getElementsByTagName("School")  for school in schools:    print(school.nodeName)    print(school.tagName)    print(school.getAttribute("Name"))    print(school.attributes["Name"].value)    classes = school.getElementsByTagName("Class")    print("There are %d classes in school %s" %(classes.length, school.getAttribute("Name")))    for mclass in classes:      print(mclass.getAttribute("Id"))      for student in mclass.getElementsByTagName("Student"):        print(student.attributes["Name"].value)        print(student.getElementsByTagName("English")[0].nodeValue) #這個為什么啊?        print(student.getElementsByTagName("English")[0].childNodes[0].nodeValue)        student.getElementsByTagName("English")[0].childNodes[0].nodeValue = 75f = open('new.xml', 'w', encoding = 'utf-8')dom.writexml(f,encoding = 'utf-8')f.close()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江西省| 察雅县| 宁城县| 平度市| 麻江县| 永川市| 合江县| 黔西县| 麦盖提县| 伽师县| 宁晋县| 正阳县| 全南县| 肃北| 南靖县| 都兰县| 宜丰县| 龙井市| 普宁市| 茶陵县| 江源县| 金山区| 东阳市| 个旧市| 盈江县| 沾化县| 云南省| 那坡县| 申扎县| 淮阳县| 嘉祥县| 崇明县| 玉溪市| 呼伦贝尔市| 南宫市| 合江县| 临沂市| 北票市| 萝北县| 苍南县| 临清市|