第十四課喲 主要來說說XML

2021-08-20 08:21:06 字數 4514 閱讀 7448

今天來寫一寫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的四種...