今天來寫一寫xml檔案
xml是什麼呢?(鬼使神差的就問了━━( ̄ー ̄*|||━━)是可擴充套件標記語言,與作業系統,程式語言的開發平台無關,實現不同系統之間的資料交換.他作用就是資料交換和配置應用程式和**.
xml的結構
<?xml version="1.0" encoding="utf-8" ?>此處問開頭宣告
節點一開始
節點二開始
分節點一
分節點二
分節點三
節點二結束
節點一的結束
在xml裡的所有元素
都稱之為標籤
《元素名 屬性名="屬性值">元素內容
屬性值由""包裹,乙個元素可以有多個屬性,屬性之中不能直接包含特殊符號
在xml裡元素名沒有限制
在編寫xml時的注意事項
1.所有的xml元素都必須由結束標籤
2.xml標籤對大小寫敏感
3.xml必須正確的巢狀
4.同級元素標籤以縮排對齊
5.元素名稱可以包含字母,數字或者其他字元,但是,不能以數字或者標點符號開始
6.元素名稱種不能含空格
xml檔案格式
tag,即標籤,用於標識該元素表示哪種資料.
attrib,即屬性,用dictionary形式儲存.
text,文字字串,可以用來儲存一些資料.
tail,尾字串,並不是必須的.
即texttail
elementtree解析xml檔案
匯入elementtree==>import xml.etree.elementtree as et
解析xml檔案找到根節點:
直接解析xml檔案並獲得根節點==>tree = et.parse('country_data.xml') root = tree.getroot()
解析字串==>root = et.fromstring(country_data_as_string)
遍歷根節點可以獲得子節點,然後就可以根據需求拿到需要的字段
1 先載入文件到記憶體裡 形成乙個倒裝的樹結構
tree=et.parse('xml.xml')
2 獲取根節點
root=tree.getroot()
hhh={}
node=root.find('country')
print(node.attrib['name'])
刪除指定的節點以及儲存
import xml.etree.elementtree as et
tree = et.parse('country_data.xml')
root = tree.getroot()
animnode = root.find('country')
if animnode.attrib['name'] == 'liechtenstein':
root.remove(animnode)
tree.write('finish.xml')儲存修改後的xml檔案
使用sax apl解析xml(這裡是重中之重!)
make_parser()方法
以下方法建立乙個新的解析器物件並返回它。建立的解析器物件將是系統查詢的第乙個解析器型別。
xml.sax.make_parser( [parser_list] )
parse()方法
以下方法建立乙個sax解析器並使用它來解析文件。
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
parsestring方法
還有一種方法來建立sax解析器並解析指定的xml字串。
xml.sax.parsestring(xmlstring, contenthandler[, errorhandler])
他的具體做法就是
import xml.sax
class movehandler(xml.sax.contenthandler):
def __init__(self):
self.currentdata=""
self.type=""
self.format=""
self.year=""
self.rating=""
self.stars=""
self.description=""
def startelement(self, tag, attrs):
self.currentdata=tag
if tag=="movie":
print("******movie******")
title=attrs['title']
print('title:',title)
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
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 = ""
if __name__=='__main__':
1 create an xmlreader
parser=xml.sax.make_parser()
2 turn off namepsaces
工作目錄或者工作空間 命名空間
parser.setfeature(xml.sax.handler.feature_namespaces, 0)
3 override the default contexthandler
handler=movehandler()
替換覆蓋原來的hadler
parser.setcontenthandler(handler)
parser.parse("move.xml")
以上的move.xml是我的xml檔名稱
寫到這裡,今天的xml就說完了,事實上這裡的難點就是使用sax apl解析xml,所以如果你再看這篇文章,一定要反覆的去嘗試,因為我再寫的時候經常日常報錯(lll¬ω¬)......
等等!我還有一句話:
如果你是xml,那我就是程式設計師,總會想盡一切辦法,去讀懂你.再見.
第十四課網路程式設計
第十四課網路程式設計 int wsastartup word wversionrequested,lpwsadata lpwsadata wversionrequested引數用語指定準備載入得winsock 庫得版本,高委位元組指定所需要得winsock庫得副版本,而地位位元組則是主版本,課用ma...
python第十四課 2018 5 3
正則 數字 d 字母 s asciis 97 a 65 a pjack s.s s.p name 實驗 re模組簡介 re模組是python中處理正規表示式的乙個模組,通過re模組的方法,把正規表示式pattern編譯成正則物件,以便使用正則物件的方法 re的方法 match search matc...
Android第十四課筆記
1 activity簡介 activity是android 應用程式的四大元件之一,它負責安卓應用程式的使用者介面 乙個應用程式一般會包含若干個activity,每乙個activity元件負責乙個使用者介面的展現 activity用來提供乙個能讓使用者操作並與之互動的介面 2 activity的四種...