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...