python使用sax實現xml解析

2022-06-17 22:12:15 字數 2434 閱讀 3712

之前在使用xml解析的時候,在網上搜了很多教程,最終沒有能按照網上的教程實現需求。

所以呢,只好自己去看原始碼,在sax的__init__.py下看到這麼一段**:

1 def parse(source, handler, errorhandler=errorhandler()):

2 parser = make_parser()

3 parser.setcontenthandler(handler)

4 parser.seterrorhandler(errorhandler)

5 parser.parse(source)

# 可以看出來,執行xml解析至少需要兩個引數:source:原始檔路徑和例項化的handler物件

下面我們就用乙個例子來是實現一下:(事先說明,這個例子是網上找的,不是自己寫的)

harry potter

j k. rowling

2005

29.99

learning xml

erik t. ray

2003

39.95

下面將對各個步驟的作用逐個說明:

#!usr/bin/env python

# -*- coding: utf-8 -*-

# @time : 2018/5/30 22:43

# @author : adong_chen

from xml import sax

class testhandler(sax.contenthandler): # 定義自己的handler類,繼承sax.contenthandler

def __init__(self):

sax.contenthandler.__init__(self) # 弗父類和子類都需要初始化(做一些變數的賦值操作等)

self._content = ""

self._tag = ""

def startelement(self, name, attrs): # 遇到標籤時候會執行的方法,這裡的name,attrs不用自己傳值的(這裡其實是重寫)

self._tag = name

if name == "bookstore":

print "*****====bookstore*****===="

if self._tag == "book":

print "book: " + attrs["category"]

print "--------------------------"

def endelement(self, name):              # 遇到執行的方法,name不用自己傳值(重寫)

# print "endelement"

if name == "bookstore":

print "*****====bookstore*****===="

elif name == "title":

print "title: " + self._content

elif name == "author":

print "author: " + self._content

elif name == "year":

print "year: " + self._content

elif name == "price":

print "price: " + self._content

else:

pass

def characters(self, content): # 獲取標籤內容

self._content = content

if __name__ == "__main__":

handler = testhandler() # 自定義類例項化成物件

sax.parse("test2.xml", handler) # 解析xml檔案

執行結果如下:

*****====bookstore*****====

book: children

--------------------------

title: harry potter

author: j k. rowling

year: 2005

price: 29.99

book: web

--------------------------

title: learning xml

author: erik t. ray

year: 2003

price: 39.95

*****====bookstore*****====

python中使用minidom處理xml

pyhton中使用xml儲存配置檔案,下面是乙個簡單的例子,實測可用。產生xml檔案部分。from xml.dom import minidom def generatexml baud,com impl minidom.getdomimplementation doc impl.createdoc...

Python3使用minidom讀寫xml檔案

python使用minidom處理xml還是比較麻煩的,網上很多資料都是斷斷續續的一部分,不成體統。這裡寫乙個demo,把常用xml解析操作 讀寫檔案 解析節點 新增節點 解析屬性 新增屬性 解析節點值和修改節點值等,都包含進來的。供各位讀者參考 demo實現的功能是從input.xml檔案中讀取x...

python3使用sax操作xml

python使用sax解析xml sax是一種基於事件驅動的api。利用sax解析xml文件牽涉到兩個部分 解析器和事件處理器。解析器負責讀取xml文件,並向事件處理器傳送事件,如元素開始跟元素結束事件 而事件處理器則負責對事件作出相應,對傳遞的xml資料進行處理。1 對大型檔案進行處理 2 只需要...