首頁 > 軟體

python與xml資料的互動詳解

2022-07-21 14:02:38

一 什麼是XML?

python與json資料的互動詳情 在這篇文章中我們介紹了json是一種獨立於程式語言和平臺的資料儲存和交換方式(格式),其實xml和json基本一樣,也是一種用於進行資料儲存和交換的方式,並且也獨立於程式語言和平臺。
XML可延伸標示語言(英語:Extensible Markup Language,簡稱:XML)是一種標示語言,是從標準通用標示語言(SGML)中簡化修改出來的。XML設計的宗旨就是用來傳輸資料的。

二 XML語法規則

1. xml語法規則

xml的語法規則和html的語法規則很像,但卻有著明顯的差別。相同的是它們都用標籤對來儲存資料,但是html的標籤都是預定義的,而xml的標籤則完全是由編輯者自己定義的。

xml的語法規則如下:

<?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>達拉崩吧班德貝蒂卜多比魯翁·昆相簿塔卡提考特蘇瓦西拉鬆·木大</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 標籤必須是成對出現的,即必須有關關閉標籤

<?xml version="1.0" encoding="utf-8"?>

上面這部分是xml的檔案宣告部分,包含了版本資訊和編碼方式,是可選的。其他

更多的規則請參考:

2. xml與html的區別

xml和html很像,但區別也很大,具體不同如下:

  • html標籤是預定義的,而xml則是由使用者自己定義
  • xml被設計用來傳輸和儲存資料,其焦點是資料的內容
  • html被設計用來顯示資料,其焦點是資料的外觀

三 python與xml的互動

python獲取xml的資料資訊一般用xml.dom 來解析,具體如下

1. 獲取標籤對內的資料

比如提取上面xml檔案中PayAcct 標籤內的資料

from xml.dom import minidom

#mimidom.parse將xml檔案解析成DOM檔案
data = minidom.parse('../練習檔案/XML練習.XML')
print(type(data))
print('*'*50)

#首先利用data.getElementsByTagName('標籤名')提取出標籤
payacct = data.getElementsByTagName('PayAcct')
print(type(payacct))
for i in range(len(payacct)):
    print(payacct[i].toxml())#toxml還原xml格式
print('*'*50)

print('PayAcct標籤內容如下:')
#再用 firstChild.data 獲取標籤資料值
for i in range(len(payacct)):
    print(payacct[i].firstChild.data)

如上,minidom.parse()的作用是將xml檔案解析成DOM檔案,然後通過getElementsTagName()方法提取出標籤對,最後通過firstChild.data獲取標籤內的資料,過程中需要注意的是getElementsTagName()方法提取出標籤對返回的結果是一個列表,

結果如下:

>>>
<class 'xml.dom.minidom.Document'>
**************************************************
<class 'xml.dom.minicompat.NodeList'>
<PayAcct>1</PayAcct>
<PayAcct>2</PayAcct>
<PayAcct>6232621151792579</PayAcct>
**************************************************
PayAcct標籤內容如下:
1
2
6232621151792579

2. 獲取標籤屬性值

通過getAttribute 獲取標籤的屬性值。如下獲取login標籤的屬性值

<login username="張三" password="123456">張三</login>
from xml.dom import minidom

#mimidom.parse將xml檔案解析成DOM檔案
data = minidom.parse('../練習檔案/XML練習.XML')

#首先利用data.getElementsByTagName('標籤名')提取出標籤
login = data.getElementsByTagName('login')
print(type(login))
print(login)
for i in range(len(login)):
    print(login[i].toxml())
print('*'*50)

#再用 getAttribute('屬性值') 獲取標籤屬性值
print('login的屬性值如下:')
print(login[0].getAttribute('username'))
print(login[0].getAttribute('password'))

結果如下:

>>>
<class 'xml.dom.minicompat.NodeList'>
[<DOM Element: login at 0x188b60ec048>]
<login password="123456" username="張三">張三</login>
**************************************************
login的屬性值如下:
張三
123456

到此這篇關於python與xml資料的互動詳解的文章就介紹到這了,更多相關python與xml資料互動內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com