python3使用sax操作xml

2021-07-15 07:37:58 字數 2974 閱讀 2278

python使用sax解析xml

sax是一種基於事件驅動的api。

利用sax解析xml文件牽涉到兩個部分:解析器和事件處理器。

解析器負責讀取xml文件,並向事件處理器傳送事件,如元素開始跟元素結束事件;

而事件處理器則負責對事件作出相應,對傳遞的xml資料進行處理。

1、對大型檔案進行處理;

2、只需要檔案的部分內容,或者只需從檔案中得到特定資訊。

3、想建立自己的物件模型的時候。

在python中使用sax方式處理xml要先引入xml.sax中的parse函式,還有xml.sax.handler中的contenthandler。

test.py

#!/usr/bin/python3

import xml.sax

class moviehandler( xml.sax.contenthandler ):

def __init__(self):

self.currentdata = ""

self.type = ""

self.format = ""

self.year = ""

self.rating = ""

self.stars = ""

self.description = ""

# 元素開始呼叫

def startelement(self, tag, attributes):

self.currentdata = tag

if tag == "movie":

print ("*****movie*****")

title = attributes["title"]

print ("title:", title)

# 元素結束呼叫

def endelement(self, tag):

if self.currentdata == "type":

print ("type:", self.type)

elif self.currentdata == "format":

print ("format:", self.format)

elif self.currentdata == "year":

print ("year:", self.year)

elif self.currentdata == "rating":

print ("rating:", self.rating)

elif self.currentdata == "stars":

print ("stars:", self.stars)

elif self.currentdata == "description":

print ("description:", self.description)

self.currentdata = ""

# 讀取字元時呼叫

def characters(self, content):

if self.currentdata == "type":

self.type = content

elif self.currentdata == "format":

self.format = content

elif self.currentdata == "year":

self.year = content

elif self.currentdata == "rating":

self.rating = content

elif self.currentdata == "stars":

self.stars = content

elif self.currentdata == "description":

self.description = content

if ( __name__ == "__main__"):

# 建立乙個 xmlreader

parser = xml.sax.make_parser()

# turn off namepsaces

parser.setfeature(xml.sax.handler.feature_namespaces, 0)

# 重寫 contexthandler

handler = moviehandler()

parser.setcontenthandler( handler )

parser.parse("movies.xml")

執行結果

[root@mail pythoncode]# python3 test.py

*****movie*****

title: enemy behind

type: love中國

format: ***

year: 2003

rating: pg

stars: 10

description: talk about a us-japan war

*****movie*****

title: transformers

type: *****, science fiction

format: ***

year: 1989

rating: r

stars: 8

description: a schientific fiction

movies.xml內容

<?xml version="1.0" encoding="utf-8"?>

love中國

***2003

pg10

talk about a us-japan war

*****, science fiction

***1989r8

a schientific fiction

python3使用 python3使用模組

python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...

python3記憶體快取 python 3 x

我試圖通過telnet 使用控制台伺服器控制台 到cisco路由器,執行一些show命令,並將它們的輸出儲存在變數中。下面是簡單的指令碼的工作原理 在執行指令碼之前已經登入到路由器 在實際使用案例中不是很有用 import telnetlib import datetime import getpa...

python 元組使用 Python3

python3 元組 python 的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號 列表使用方括號 元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。例項 python 3.0 tup1 google runoob 1997,2000 tup2 1,2,3,4,5 tup...