python sax方式解析xml

2021-06-21 20:14:38 字數 1922 閱讀 1214

dom方式在解析xml資料時是將整個文件樹載入到記憶體中,因此在解析大型一點的xml資料時沒什麼優勢,這個時候可以考慮使用sax的方式解析

首先要實現自己的xml.sax.handler.contenthandler內容處理者類

主要是過載以下方法:

def __init__(self):

xml.sax.handler.contenthandler.__init(self)#初始化方法

def startdocument(self):#開始解析文件

print("start handler document")

def enddocument(self):#結束解析文件

print("end handler document")

def startelement(self,name,attrs):#開始解析節點

print(name,attrs)

def endelement(self,name):#結束解析節點

print("end element",name)

def characters(self,content):#解析內容

print("content",content)

其中attrs是節點中的屬性型別是:xml.sax.xmlreader.attributesimpl

可以通過attrs.getlength()或者attrs.__len__()>0來判斷是否還有屬性

attrs.getnames()返回乙個含有屬性名的list 然後可以根據屬性名取得型別,值

for _,attrname in enumerate(attrs):

attrs.getvalue(attrname )

class xmlcontenthandler(xml.sax.handler.contenthandler):

def __init__(self):

xml.sax.handler.contenthandler.__init__(self)

def startdocument(self):

print("start handler documtnet")

def enddocument(self):

print("end handler document")

def startelement(self,name,attrs):

print("當前處理節點:",name)

if attrs.__len__() > 0:#attrs.getlength()>0

for _,attr in enumerate(attrs.getnames()):

print(name,"節點屬性",attr,attrs.getvalue(attr))

else:

print(name,"節點不包含屬性")

def endelement(self,name):

print("當前處理節點:",name,"處理完")

def characters(self,content):

content =content.strip().replace("\n","").replace("\r","")

if "" != content:

print("節點內容",content)

saxparser = xml.sax.make_parser()

handler = xmlcontenthandler()

saxparser.setcontenthandler(handler)

saxparser.parse("text.xml")

測試結果:

python sax流式解析xml檔案例項

注 摘出解析xml兩個關鍵函式 import xml.sax import xml.sax.handler class saxhandler xml.sax.contenthandler def init self self.tag none self.attribute defstarteleme...

IOS內建NSXMLParser解析xml

nsxmlparser解析xml格式的資料 用法如下 首先,nsxmlparser必須繼續nsxmlparserdelegate協議 inte ce xmlhelper nsobject 首先設定xml資料,並初始化nsxmlparser void viewdidload 遍例xml的節點 void...

使用原生的NSXmlParser解析xml資料

下面是本人使用原聲nsxmlparser對xml資料進行的解析。這裡有篇有一篇很不錯的教程,使用gdataxml庫對xml資料進行的解析,而且還有對xml資料格式的組建,講解的很是詳細。import viewcontroller.h pragma mark xml解析器 xml資料解析器 inte ...