zoukankan      html  css  js  c++  java
  • 函数和常用模块【day06】:xml模块(六)

    本节内容

    1、简述

    2、xml格式

    3、xml节点操作

    4、创建新的xml文件

    一、简述

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

    二、xml格式

    1、xml的格式

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

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

    三、xml节点操作

    1、查询xml文档内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import xml.etree.ElementTree as et
     
    tree = et.parse("xmltest.xml")
    root = tree.getroot()   #获取根节点
    print(root.tag)   #打印节点名称
     
    #遍历xml文档
    for child in root:
        print(child.tag,child.attrib) #分别打印子节点名称和子节点属性
        #遍历子节点下的所有节点
        for in child:
            print(i.tag,i.text)   #打印子节点下节点的节点名和节点值
        #只遍历year节点
        for in child.iter("year"):
            print(" ",i.tag,i.attrib,i.text)
     
    #只遍历year节点
    for node in root.iter("year"):
        print(node.tag,node.text)  #打印year的节点名和节点值

    注:

    1. tag是返回节点名,attrib返回节点属性,text返回节点值
    2. 返回根节点用getroot()方法
    3. 只遍历某个节点,只需要用iter(节点名)方法

    2、修改xml文档内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import xml.etree.ElementTree as et
     
    tree = et.parse("xmltest.xml")
    root = tree.getroot()
     
    #修改year节点的值
    for node in root.iter("year"):
        new_year = int(node.text) + 1   #修改节点值
        node.text = str(new_year)    #修改后强制转换成字符串类型
        node.tag = "myyear"            #修改节点名
        node.set("zhangqigao",'handsome')   #修改节点属性
     
    tree.write("xmltest1.xml")   #修改完成后,重新写入xml文件(可以是任何文件,包括原来的)

    注:可以修改xml文件中的任何内容,包括本身的节点名,修改后一定要有写入xml文件的操作。

    3、删除node节点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import xml.etree.ElementTree as et
     
    tree = et.parse("xmltest.xml")
    root = tree.getroot()
     
    #删除
    for country in root.findall("country"):  #找到第一层子节点
        rank = int(country.find("rank").text)   #找到子节点下的'rank'节点的节点值
        if rank > 50:
            root.remove(country)    #删除子节点
     
    tree.write("xmltest1.xml")    #重新写入xml文件

     注:

    1. findall()从根节点只能根据第一层的子节点名查找,并且返回第一层子节点的内存地址
    2. find从根节点查找第一层子节点名,返回第一层子节点下的所有节点的内存地址
    3. 删除子节点用remove()方法
    4. 删除以后,一定要做重新写入新的xml文件操作

    四、创建新的xml文件

    1、手动创建xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import xml.etree.ElementTree as et
     
    new_xml = et.Element("namelist")   #创建根节点
     
    #创建第一层子节点,后面参数依次是:父节点,子节点,子节点属性
    name = et.SubElement(new_xml,"name",attrib={"zhangqigao":"handsome"})
    #创建第二层子节点
    age = et.SubElement(name,"age",attrib={"check":"yes"})
    #设置第二层节点值
    age.text = '22'
    sex = et.SubElement(name,"sex")
    sex.text = "man"
    #创建另外一个第一层子节点
    name2 = et.SubElement(new_xml,"name",attrib={"zhangqigao":"haoshuai"})
    #创建其第二层子节点
    age = et.SubElement(name2,"age")
    age.text = '19'
     
    ET = et.ElementTree(new_xml)  #生成新的xml文档
    ET.write("test.xml",encoding="utf-8",xml_declaration=True)  #在新xml文件的开头自动添加:<?xml version='1.0' encoding='utf-8'?>
     
    et.dump(new_xml)  #在屏幕上打印生成的格式

     注:et.dump(new_xml)这个有什么作用呢?当你需要直接把字符串传过去,不需要串文件时,用这个就ok了。

  • 相关阅读:
    20172315 2018-2019-1 《程序设计与数据结构》第九周学习总结
    20172315 2018-2019-1 《程序设计与数据结构》实验二报告
    20172315 2018-2019-1 《程序设计与数据结构》第八周学习总结
    20172315 2018-2019-2 《程序设计与数据结构》第七周学习总结
    20172315 2018-2019-1 《程序设计与数据结构》第六周学习总结
    20172315 2018-2019-1 《程序设计与数据结构》第五周学习总结
    20172315 2018-2019-1 《程序设计与数据结构》第四周学习总结
    20172310 2018-2019-1《程序设计与数据结构》(下)课程总结
    Do-Now—团队 冲刺博客六
    Do-Now—团队冲刺博客三
  • 原文地址:https://www.cnblogs.com/luoahong/p/9890351.html
Copyright © 2011-2022 走看看