使用sax庫解析xml
使用elementtree解析xml
xml 全稱可擴充套件標記語言,是一種用於標記電子檔案使其具有結構性的標記語言,可以用來標記資料、定義資料型別。
xml 的宣告
xml 文件的宣告是可選的,如果要宣告,需要將其放在文件的第一行最頂端。
<?xml version=
"1.0" encoding=
"utf-8"?>
以上定義了 xml 的版本1.0和所使用的編碼utf-8。
元素xml 元素指的是 xml 檔案**現的標籤,乙個標籤分為開始標籤和結束標籤,結束標籤與開始標籤名稱相同,只是要在前面加乙個斜槓/,比如:
乙個標籤中也可以巢狀其他的若干個子標籤。但所有的標籤必須合理的巢狀,絕不允許交叉巢狀。
格式良好的 xml 文件必須有且僅有乙個根元素,其他的元素都是這個元素的子孫元素。
元素的命名規則:
xml 沒有保留字,元素名稱可以任意使用。
屬性乙個元素可以有多個屬性,每個屬性都有它自己的名稱和取值。同乙個元素下,屬性名稱不能重複。屬性的值一定要用雙引號或者單引號括起來,比如:
"2018" month=
"7" day=
"28"
>
屬性的命名規範和元素的命名規範一樣。
注釋xml 檔案中注釋採用:這樣的格式,注釋沒有結束標籤,不能巢狀。
解析器解析器負責讀取 xml 文件,並向事件處理器傳送事件,比如元素開始跟元素結束事件。
sax提供了兩個函式:parse
和parsestring
。前者用於從檔案中解析 xml 資料,後者用於從字串中解析 xml 資料。
兩個函式的宣告如下:
xml.sax.parse( xmlfile, contenthandler)
xml.sax.parsestring(xmlstring, contenthandler)
parse函式的第乙個引數是 xml 檔案的路徑,比如:
xml.sax.parse(
"test.xml",contenthandler)
parsestring函式的第乙個引數是,含有 xml 資料的字串,比如:
data =
"hello"
xml.sax.parsestring(data,contenthandler)
而它們的第二個引數則是事件處理器。
事件處理器
事件處理器則負責對事件作出響應,對傳遞的 xml 資料進行處理。
乙個事件處理器必須是contenthandler型別的子類,通過重寫父類的以下函式來響應解析器的事件請求:
startdocument()
函式,它在文件啟動的時候呼叫;
enddocument()
函式,它在解析器到達文件結尾時呼叫;
startelement(name, attrs)
函式,它在遇到 xml 開始標籤時呼叫,name
是標籤的名字,attrs
是標籤的屬性值字典;
endelement(name)
函式,它在遇到 xml 結束標籤時呼叫。
elementtree
xml.etree.elementtree
模組是乙個輕量級的 dom(檔案物件模型),具有方便友好的 api。**可用性好,速度快,消耗記憶體少。
elementtree模組大致可以三部分:elementtree類,element類以及一些操作 xml 的函式。
解析xml.etree.elementtree
提供了兩個函式:parse
和fromstring
,用於從檔案和字串解析 xml 資料。
parse
函式返回乙個elementtree物件,fromstring
返回乙個element物件。
element物件代表乙個 xml 元素。elementtree物件代表乙個 xml 文件,它提供了函式getroot,來獲取乙個文件的根元素。
查詢元素
element物件和elementtree物件都提供了用於在子元素查詢元素的函式:
獲取元素的文字與屬性值
element有乙個屬性text,這個屬性用於獲取直接在這個元素的開始、結束標誌之間的文字。如果沒有文字,則返回空字串。
如果要獲取乙個元素的某個屬性,可以使用get(name)函式,它會尋找當前元素上名為name的屬性。如果找到就返回這個屬性的值,沒找到則返回空字串。
xm學習筆記
1關於靜態網頁的製作 html主要負責頁面的結構 css頁面的美觀 js與使用者的互動 2html 有標籤體的標籤 沒有標籤的標籤 html的標籤是固定的。是由 w3c預先規定好的!3xml和html的簡單對比 xml 1 可以擴充套件的標記語言 2 可以自定義標籤 3 描述帶關係的資料,作為軟體的...
Python高階學習筆記之JSON
使用json庫 json 是一種輕量級的文字資料交換格式。與 xml 相比,擁有更小 更快 更易解析的特點。其結構和 python 的list dict有點相似。資料表示 json 中資料都以名稱 值的形式表示,名稱包括在一對雙引號 中,值則有多種形式,多條資料之間用逗號,隔開。這種表示方式與 py...
Python學習筆記 高階
定義乙個類 注意的是 在類中的每個函式中最少要有乙個self引數 其實這裡的self this class test name 張三丰 age 200 defsay self print hi i am san feng 例項化乙個物件 t1 test 通過物件呼叫自身的方法 t1.say pyth...