python数据交换模块-XML

python数据交换模块-XML

大家好,又见面了,我是全栈君。

XML 可扩展标记语言

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

xml的格式如下,就是通过<>节点来区别数据结构的:

<?xml version="1.0"?>
<data>
        <country personinfo="Liechtenstein">
                <rank updated="yes">2</rank>
                <year>2008</year>
                <gdppc>141100</gdppc>
                <neighbor personinfo="Austria" direction="E"/>
                <neighbor personinfo="Switzerland" direction="W"/>
        </country>
        <country personinfo="Singapore">
                <rank updated="yes">5</rank>
                <year>2011</year>
                <gdppc>59900</gdppc>
                <neighbor personinfo="Malaysia" direction="N"/>
        </country>
        <country personinfo="Panama">
                <rank updated="yes">69</rank>
                <year>2011</year>
                <gdppc>13600</gdppc>
                <neighbor personinfo="Costa Rica" direction="W"/>
                <neighbor personinfo="Colombia" direction="E"/>
        </country>
</data>

xml协议在各个语言里的都是支持的,在python中可以用以下模块操作xml  

import xml.etree.ElementTree as ET   #导入模块别名为ET
tree = ET.parse("xml-test.xml")    #打开xml-test.xml文件
root = tree.getroot()
print(root)             #是一个内存地址
print(root.tag)         #是xml文件的tag
#遍历xml文档
for child in root:
        print(child.tag,child.attrib,child.text)
        for i in child:
                print(i.tag,i.text,i.attrib)

#只遍历year节点
for node in root.iter("year"):
        print(node.tag,node.text)

修改和删除xml文档内容
import xml.etree.ElementTree as ET

tree = ET.parse("xmltest.xml")
root = tree.getroot()

#修改
for node in root.iter('year'):      #只遍历iter
        new_year = int(node.text) + 1
        node.text = str(new_year)
        node.set("updated","yes")

tree.write("xmltest.xml")

#删除node
for country in root.findall('country'):
     rank = int(country.find('rank').text)
     if rank > 50:
         root.remove(country)

tree.write('output.xml')

自己创建xml文档

import xml.etree.ElementTree as ET

new_xml = ET.Element("personinfolist")        #根节点
personinfo = ET.SubElement(new_xml,"personinfo",attrib={
   
   "enrolled":"yes"}) #new_xml子节点、节点名字、节点属性
name = ET.SubElement(personinfo,"name")
name.text = "aaa li"
age = ET.SubElement(personinfo,"age",attrib={
   
   "checked":"no"}) #
sex = ET.SubElement(personinfo,"sex")
age.text = '33'

personinfo2 = ET.SubElement(new_xml,"personinfo",attrib={
   
   "enrolled":"no"})
name2 = ET.SubElement(personinfo2,"name")
name2.text = "aaa wang"
age = ET.SubElement(personinfo2,"age")
age.text = '19'

et = ET.ElementTree(new_xml) #生成文档对象
et.write("test.xml", encoding="utf-8",xml_declaration=True)

ET.dump(new_xml) #打印生成的格式
结果:
<?xml version='1.0' encoding='utf-8'?>
<personinfolist>
    <personinfo enrolled="yes">
        <name>aaa li</name>
        <age checked="no">33</age>
        <sex />
    </personinfo>
    <personinfo enrolled="no">
        <name>aaa wang</name>
        <age>19</age>
    </personinfo>

</personinfolist>




本文转自506554897 51CTO博客,原文链接:,如需转载请自行联系原作者 http://blog.51cto.com/506554897/2047335

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107956.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tcpdump抓包命令_tcpdump指定ip抓包命令

    tcpdump抓包命令_tcpdump指定ip抓包命令tcpdump是一个功能强大的命令行数据包分析器,它是通过监听服务器的网卡来获取数据包,所有通过网络访问的数据包都能获取到。它也提供了过滤器的功能,可以获取指定的网络、端口或协议的数据包程序员日常排查问题,最常用的是使用过滤器功能获取指定端口的数据包,用来分析服务器是否收到请求、请求数据是否完整。参数介绍tcpdump命令的参数很多,详见如下这里只介绍一些常用的参数​-ccount//count表示数量。抓取数据包的数量达到count后结束命令,如果不使用…

    2022年8月21日
    52
  • Android Fragment用法之给Activity创建事件回调

    在某些案例中,可能需要Fragment与Activity共享事件。在Fragment内部定义一个回调接口是一个好方法,并且规定由持有它的Activity实现这个回调方法。当Activity通过接口接受回调时,它能在必要时与布局中的其他Fragment共享信息。例如,如果一个音乐播放器的应用程序在一个Activity中有两个Fragment—一个用来显示歌曲列表(Fragment A),另一

    2022年3月9日
    40
  • pycharm plot不显示_pycharm用plot窗口显示图片

    pycharm plot不显示_pycharm用plot窗口显示图片最近用了pycharm,感觉还不错,就是pandas中Series、DataFrame的plot()方法不显示图片就给我结束了,但是我在ipython里就能画图以前的代码是这样的importmatplotlib.pyplotaspltfrompandasimportDataFrame,SeriesSeries([4,5,7]).plot()找了半天发现只要加个pl

    2022年8月26日
    3
  • android错误之Unable to resolve target ‘Google Inc.:Google APIs:6’

    在导入一个项目是,出现Unable to resolve target ‘Google Inc.:Google APIs:6’ 按下面方式解决: 修改目录下的project.property文件内容为target=Google Inc.:Google APIs:16(在这里他本来可能是其他版本号,不用管它,只需要改成你所导入的包的版本就行,比如我这里已经导入就是api1

    2022年3月10日
    45
  • minikube 安装指南

    minikube 安装指南

    2021年5月14日
    118
  • chinese zodiac signs_icpc铜奖

    chinese zodiac signs_icpc铜奖输入23 14 3输出Impossible2 1 4 33 4 1 24 3 2 1题解 找规律+构造#include<bits/stdc++.h>using namespace std;const int N = 1001;int ch[N][N];int lowbit(int x){ return x & (-x);}int main(){ int n,k; int T; cin>>T; ..

    2022年8月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号