python與xml數(shù)據(jù)的交互詳解
一 什么是XML?
python與json數(shù)據(jù)的交互詳情 在這篇文章中我們介紹了json是一種獨(dú)立于編程語言和平臺(tái)的數(shù)據(jù)存儲(chǔ)和交換方式(格式),其實(shí)xml和json基本一樣,也是一種用于進(jìn)行數(shù)據(jù)存儲(chǔ)和交換的方式,并且也獨(dú)立于編程語言和平臺(tái)。
XML可擴(kuò)展標(biāo)記語言(英語:Extensible Markup Language,簡(jiǎn)稱:XML)是一種標(biāo)記語言,是從標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)中簡(jiǎn)化修改出來的。XML設(shè)計(jì)的宗旨就是用來傳輸數(shù)據(jù)的。
二 XML語法規(guī)則
1. xml語法規(guī)則
xml的語法規(guī)則和html的語法規(guī)則很像,但卻有著明顯的差別。相同的是它們都用標(biāo)簽對(duì)來存儲(chǔ)數(shù)據(jù),但是html的標(biāo)簽都是預(yù)定義的,而xml的標(biāo)簽則完全是由編輯者自己定義的。
xml的語法規(guī)則如下:
<?xml version="1.0" encoding="utf-8"?> <CFX> <Head> <TxCode>CHL2108</TxCode> <WorkDate>20220629</WorkDate> <WorkTime>164506</WorkTime> </Head> <WDWMSG> <login username="張三" password="123456">張三</login>> <PayAcct>1</PayAcct> <TrnPwd></TrnPwd> <TsmNbr>SSM1050000000001</TsmNbr> <PwdKeySeq>001</PwdKeySeq> <PwdChkVal>6391E8421C007ED5</PwdChkVal> <Reverse>D0E8C46A0B765B</Reverse> </WDWMSG> <PSBMSG> <PayAcct>2</PayAcct> </PSBMSG> <CHL2108> <TrnSerial>2207081541590398</TrnSerial> <CHLSerial>STM202206291645060000000000</CHLSerial> <PayAcct>6232621151792579</PayAcct> <HandOrgName>達(dá)拉崩吧班德貝蒂卜多比魯翁·昆圖庫塔卡提考特蘇瓦西拉松·木大</HandOrgName> <PrintAcct>755933363410722</PrintAcct> <TrnAmt>70000</TrnAmt> <TaxVouNo>010021102121600095</TaxVouNo> <TaxOrgCode>23301900000</TaxOrgCode> <TrnPlace>0075</TrnPlace> <TaxPayCode>1456151561650569</TaxPayCode> <TrnSrc>STM</TrnSrc> </CHL2108> </CFX>
xml 必須包含根元素,它是所有其它元素的父元素,如上文中的CFXxml 標(biāo)簽必須是成對(duì)出現(xiàn)的,即必須有關(guān)關(guān)閉標(biāo)簽
<?xml version="1.0" encoding="utf-8"?>
上面這部分是xml的文檔聲明部分,包含了版本信息和編碼方式,是可選的。其他
2. xml與html的區(qū)別
xml和html很像,但區(qū)別也很大,具體不同如下:
- html標(biāo)簽是預(yù)定義的,而xml則是由使用者自己定義
- xml被設(shè)計(jì)用來傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容
- html被設(shè)計(jì)用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀
三 python與xml的交互
python獲取xml的數(shù)據(jù)信息一般用xml.dom 來解析,具體如下
1. 獲取標(biāo)簽對(duì)內(nèi)的數(shù)據(jù)
比如提取上面xml文件中PayAcct 標(biāo)簽內(nèi)的數(shù)據(jù)
from xml.dom import minidom #mimidom.parse將xml文件解析成DOM文檔 data = minidom.parse('../練習(xí)文件/XML練習(xí).XML') print(type(data)) print('*'*50) #首先利用data.getElementsByTagName('標(biāo)簽名')提取出標(biāo)簽 payacct = data.getElementsByTagName('PayAcct') print(type(payacct)) for i in range(len(payacct)): print(payacct[i].toxml())#toxml還原xml格式 print('*'*50) print('PayAcct標(biāo)簽內(nèi)容如下:') #再用 firstChild.data 獲取標(biāo)簽數(shù)據(jù)值 for i in range(len(payacct)): print(payacct[i].firstChild.data)
如上,minidom.parse()的作用是將xml文檔解析成DOM文檔,然后通過getElementsTagName()方法提取出標(biāo)簽對(duì),最后通過firstChild.data獲取標(biāo)簽內(nèi)的數(shù)據(jù),過程中需要注意的是getElementsTagName()方法提取出標(biāo)簽對(duì)返回的結(jié)果是一個(gè)列表,
結(jié)果如下:
>>>
<class 'xml.dom.minidom.Document'>
**************************************************
<class 'xml.dom.minicompat.NodeList'>
<PayAcct>1</PayAcct>
<PayAcct>2</PayAcct>
<PayAcct>6232621151792579</PayAcct>
**************************************************
PayAcct標(biāo)簽內(nèi)容如下:
1
2
6232621151792579
2. 獲取標(biāo)簽屬性值
通過getAttribute 獲取標(biāo)簽的屬性值。如下獲取login標(biāo)簽的屬性值
<login username="張三" password="123456">張三</login>
from xml.dom import minidom #mimidom.parse將xml文件解析成DOM文檔 data = minidom.parse('../練習(xí)文件/XML練習(xí).XML') #首先利用data.getElementsByTagName('標(biāo)簽名')提取出標(biāo)簽 login = data.getElementsByTagName('login') print(type(login)) print(login) for i in range(len(login)): print(login[i].toxml()) print('*'*50) #再用 getAttribute('屬性值') 獲取標(biāo)簽屬性值 print('login的屬性值如下:') print(login[0].getAttribute('username')) print(login[0].getAttribute('password'))
結(jié)果如下:
>>>
<class 'xml.dom.minicompat.NodeList'>
[<DOM Element: login at 0x188b60ec048>]
<login password="123456" username="張三">張三</login>
**************************************************
login的屬性值如下:
張三
123456
到此這篇關(guān)于python與xml數(shù)據(jù)的交互詳解的文章就介紹到這了,更多相關(guān)python與xml數(shù)據(jù)交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python數(shù)據(jù)提取-lxml模塊
- Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問題
- Python 解析簡(jiǎn)單的XML數(shù)據(jù)
- Python xml、字典、json、類四種數(shù)據(jù)類型如何實(shí)現(xiàn)互相轉(zhuǎn)換
- Python 讀取xml數(shù)據(jù),cv2裁剪圖片實(shí)例
- Python大數(shù)據(jù)之使用lxml庫解析html網(wǎng)頁文件示例
- Python 3.x基于Xml數(shù)據(jù)的Http請(qǐng)求方法
- Python基于dom操作xml數(shù)據(jù)的方法示例
- 詳細(xì)解讀Python中解析XML數(shù)據(jù)的方法
相關(guān)文章
Python fileinput模塊如何逐行讀取多個(gè)文件
這篇文章主要介紹了Python fileinput模塊如何逐行讀取多個(gè)文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10jupyter notebook中新建cell的方法與快捷鍵操作
這篇文章主要介紹了jupyter notebook中新建cell的方法與快捷鍵操作,具有很好的參考價(jià)值,希望對(duì)有所幫助。一起跟隨小編過來看看吧2020-04-04Pycharm添加虛擬解釋器報(bào)錯(cuò)問題解決方案
這篇文章主要介紹了Pycharm添加虛擬解釋器報(bào)錯(cuò)問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10python自定義函數(shù)中的return和print使用及說明
這篇文章主要介紹了python自定義函數(shù)中的return和print使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01python3:excel操作之讀取數(shù)據(jù)并返回字典 + 寫入的案例
這篇文章主要介紹了python3:excel操作之讀取數(shù)據(jù)并返回字典 + 寫入的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09Django csrf校驗(yàn)的實(shí)現(xiàn)
這篇文章主要介紹了Django csrf校驗(yàn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05