xml模組的API介面(執行錯誤,待更)
阿新 • • 發佈:2020-11-18
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) #列印全域性列表變數的獲取結果