• python与xml数据的交互


    一 什么是XML?

    python与json数据的交互 在这篇文章中我们介绍了json是一种独立于编程语言和平台的数据存储和交换方式(格式),其实xml和json基本一样,也是一种用于进行数据存储和交换的方式,并且也独立于编程语言和平台。
    XML可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言,是从标准通用标记语言(SGML)中简化修改出来的。XML设计的宗旨就是用来传输数据的。

    二 XML语法规则

    1. 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • xml 必须包含根元素,它是所有其它元素的父元素,如上文中的CFX
    • xml 标签必须是成对出现的,即必须有关关闭标签
    
    
    • 1

    上面这部分是xml的文档声明部分,包含了版本信息和编码方式,是可选的。其他
    更多的规则请参考:https://www.runoob.com/xml/xml-syntax.html


    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)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    如上,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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2. 获取标签属性值

    通过getAttribute 获取标签的属性值。如下获取login标签的属性值

    <login username="张三" password="123456">张三login>
    
    • 1
    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'))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    结果如下

    >>>
    <class 'xml.dom.minicompat.NodeList'>
    [<DOM Element: login at 0x188b60ec048>]
    <login password="123456" username="张三">张三</login>
    **************************************************
    login的属性值如下:
    张三
    123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    卷不动了,暂时记录到这,以后需要再更新

  • 相关阅读:
    [java] 23种设计模式之代理模式
    与5G一起过中秋,天涯变咫尺
    java数组
    京东获取商品历史价格信息 API 返回值说明
    PHPStorm 常用设置
    [PAT-Advanced] B1020/A1070. Mooncake (25)
    分支限界法和回溯发法解决无优先级运算问题
    vue3中使用cookie
    你知道视频怎么去水印吗?试试这三个方法学会怎么去视频水印
    找斑点(blob)的最小旋转矩形(一)
  • 原文地址:https://blog.csdn.net/qq_44690947/article/details/125882945