網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一 什么是XML?
python與json數(shù)據(jù)的交互詳情?在這篇文章中我們介紹了json是一種獨(dú)立于編程語(yǔ)言和平臺(tái)的數(shù)據(jù)存儲(chǔ)和交換方式(格式),其實(shí)xml和json基本一樣,也是一種用于進(jìn)行數(shù)據(jù)存儲(chǔ)和交換的方式,并且也獨(dú)立于編程語(yǔ)言和平臺(tái)。
XML可擴(kuò)展標(biāo)記語(yǔ)言(英語(yǔ):Extensible Markup Language,簡(jiǎn)稱:XML)是一種標(biāo)記語(yǔ)言,是從標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言(SGML)中簡(jiǎn)化修改出來(lái)的。XML設(shè)計(jì)的宗旨就是用來(lái)傳輸數(shù)據(jù)的。
二 XML語(yǔ)法規(guī)則
1. xml語(yǔ)法規(guī)則
xml的語(yǔ)法規(guī)則和html的語(yǔ)法規(guī)則很像,但卻有著明顯的差別。相同的是它們都用標(biāo)簽對(duì)來(lái)存儲(chǔ)數(shù)據(jù),但是html的標(biāo)簽都是預(yù)定義的,而xml的標(biāo)簽則完全是由編輯者自己定義的。
xml的語(yǔ)法規(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á)拉崩吧班德貝蒂卜多比魯翁·昆圖庫(kù)塔卡提考特蘇瓦西拉松·木大</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的文檔聲明部分,包含了版本信息和編碼方式,是可選的。其他
更多的規(guī)則請(qǐng)參考:
2. xml與html的區(qū)別
xml和html很像,但區(qū)別也很大,具體不同如下:
- html標(biāo)簽是預(yù)定義的,而xml則是由使用者自己定義
- xml被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容
- html被設(shè)計(jì)用來(lái)顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀
三 python與xml的交互
python獲取xml的數(shù)據(jù)信息一般用xml.dom 來(lái)解析,具體如下
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文檔,然后通過(guò)getElementsTagName()方法提取出標(biāo)簽對(duì),最后通過(guò)firstChild.data獲取標(biāo)簽內(nèi)的數(shù)據(jù),過(guò)程中需要注意的是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)簽屬性值
通過(guò)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
原文鏈接:https://blog.csdn.net/qq_44690947/article/details/125882945
相關(guān)推薦
- 2022-04-04 Python進(jìn)制轉(zhuǎn)換用法詳解_python
- 2023-09-17 org.apache.ibaorg.apache.ibatis.btis.binding.Bindi
- 2022-10-27 Kotlin?Flow封裝類SharedFlow?StateFlow?LiveData使用對(duì)比_An
- 2022-06-14 C語(yǔ)言深入淺出講解順序表的實(shí)現(xiàn)_C 語(yǔ)言
- 2022-07-04 Android自定義view利用PathEffect實(shí)現(xiàn)動(dòng)態(tài)效果_Android
- 2022-09-16 python解析照片拍攝時(shí)間進(jìn)行圖片整理_python
- 2022-10-30 使用AVFoundation實(shí)現(xiàn)視頻錄制詳解_IOS
- 2022-05-19 使用?docker?部署?APISIX的詳細(xì)介紹_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支