python与json数据的交互 在这篇文章中我们介绍了json是一种独立于编程语言和平台的数据存储和交换方式(格式),其实xml和json基本一样,也是一种用于进行数据存储和交换的方式,并且也独立于编程语言和平台。
XML可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。XML设计的宗旨就是用来传输数据的。
xml的语法规则和html的语法规则很像,但却有着明显的差别。相同的是它们都用标签对来存储数据,但是html的标签都是预定义的,而xml的标签则完全是由编辑者自己定义的。xml的语法规则如下
<CFX>
<Head>
<TxCode>CHL2108TxCode>
<WorkDate>20220629WorkDate>
<WorkTime>164506WorkTime>
Head>
<WDWMSG>
<login username="张三" password="123456">张三login>>
<PayAcct>1PayAcct>
<TrnPwd>TrnPwd>
<TsmNbr>SSM1050000000001TsmNbr>
<PwdKeySeq>001PwdKeySeq>
<PwdChkVal>6391E8421C007ED5PwdChkVal>
<Reverse>D0E8C46A0B765BReverse>
WDWMSG>
<PSBMSG>
<PayAcct>2PayAcct>
PSBMSG>
<CHL2108>
<TrnSerial>2207081541590398TrnSerial>
<CHLSerial>STM202206291645060000000000CHLSerial>
<PayAcct>6232621151792579PayAcct>
<HandOrgName>达拉崩吧班德贝蒂卜多比鲁翁·昆图库塔卡提考特苏瓦西拉松·木大HandOrgName>
<PrintAcct>755933363410722PrintAcct>
<TrnAmt>70000TrnAmt>
<TaxVouNo>010021102121600095TaxVouNo>
<TaxOrgCode>23301900000TaxOrgCode>
<TrnPlace>0075TrnPlace>
<TaxPayCode>1456151561650569TaxPayCode>
<TrnSrc>STMTrnSrc>
CHL2108>
CFX>
上面这部分是xml的文档声明部分,包含了版本信息和编码方式,是可选的。其他
更多的规则请参考:https://www.runoob.com/xml/xml-syntax.html
xml和html很像,但区别也很大,具体不同如下
python获取xml的数据信息一般用xml.dom 来解析,具体如下
比如提取上面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
通过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
卷不动了,暂时记录到这,以后需要再更新