1. 程式人生 > 實用技巧 >xml模組的API介面(執行錯誤,待更)

xml模組的API介面(執行錯誤,待更)

1.SAX(Simple API for XML,XML的簡單處理API)
通過解析XML的過程中觸發的一個個事件並呼叫使用者定義的回撥函式來處理XML檔案.當檔案很大或記憶體有限制時,可以只讀取需要部分內容.
2.DOM(Document Object Model,文件物件模型)
SAX是隻讀的,DOM允許更改XML檔案.

用SAX解析XML檔案

import xml.sax
import sys
get_record=[]               #全域性列表變數,準備接收穫取的XML內容
class GetStorehouse(xml.sax.ContentHandler):        #自定義獲取倉庫商品類(事件處理器)
    def __init__(self):
        self.CurrentData=""                         #自定義當前元素標籤名屬性
        self.title=""
        self.name=""
        self.amount=""
        self.price=""                               #自定義商品內容屬性
    def startElement(self,lable,attributes):        #遇到元素標籤時觸發該函式
        self.CurrentData=lable                      #label為例項物件在解析時傳遞的標籤名
        if lable=="goods":                          #二級子元素的開始標籤名比較
            category=attributes["category"]         #獲取元素中屬性對應的值
            return category                         #獲取元素中屬性對應的值
    def endElement(self,label):
        global get_record                           #宣告全域性變數
        if self.CurrentData=="title":
            get_record.append(self.title)
        elif self.CurrentData=="name":
            get_record.append(self.name)
        elif self.CurrentData == "amount":
            get_record.append(self.amount)
        elif self.CurrentData == "price":
            get_record.append(self.price)
    def characters(self,content):                   #遇到元素裡的內容吧值賦給類例項屬性
        if self.CurrentData=="title":               #如果遇到的元素標籤是title
            self.title=content                      #把讀取的內容賦給title
        elif self.CurrentData=="name":
            self.title=content
        elif self.CurrentData=="amount":
            self.title=content
        elif self.CurrentData=="price":
            self.title=content
#================================================
parser=xml.sax.make_parser()                    #建立一個解析器的XMLReader物件
parser.setFeature(xml.sax.handler.feature_namespaces,0)        #從XML檔案解析資料 關閉#從名稱空間解析
Handler=GetStorehouse()                         #建立事件處理器例項
parser.setContentHandler(Handler)               #為解析器設定事件處理器例項
parser.parse("storehouse.xml")                  #正式解析指定XML檔案內容
print(get_record)                               #列印全域性列表變數的獲取結果