当前位置 博文首页 > 基于Python的XML格式的文件示例代码详解

    基于Python的XML格式的文件示例代码详解

    作者:luobo_mlz 时间:2021-05-08 18:25

    XML文件是可拓展标记语言,是一种简单的数据存储语言,被设计用来传输和存储数据

    在Python中XML的一些方法

    读取文件和内容

    #引用xml模块
    from xml.etree import ElementTree as ET
    
    # ET去打开xml文件
    tree = ET.parse("files/xo.xml")
    
    # 获取根标签
    root = tree.getroot()
    
    print(root) # <Element 'data' at 0x7f94e02763b0>
    from xml.etree import ElementTree as ET
    
    content = """
    <data>
      <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
      </country>
       <country name="Panama">
        <rank updated="yes">69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
      </country>
    </data>
    """
    
    root = ET.XML(content) # 获取根标签 
    print(root) # <Element 'data' at 0x7fdaa019cea0>

    读取节点数据

    from xml.etree import ElementTree as ET
    
    content = """
    <data>
      <country name="Liechtenstein"  >
        <rank>2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
      </country>
       <country name="Panama">
        <rank>69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
      </country>
    </data>
    """
    
    # 获取根标签 data
    root = ET.XML(content)
    
    country_object = root.find("country") # 获取XML文件中的country标签
    print(country_object.tag, country_object.attrib)# 获取country标签名  获取country标签地属性
    gdppc_object = country_object.find("gdppc")# 获取gdppc标签
    print(gdppc_object.tag,gdppc_object.attrib,gdppc_object.text)# 获取gdppc标签的名称  获取gdppc属性(没有属性为:{}) 获取gdppc标签里面的内容
    from xml.etree import ElementTree as ET
    
    content = """
    <data>
      <country name="Liechtenstein">
        <rank>2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
      </country>
       <country name="Panama">
        <rank>69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
      </country>
    </data>
    """
    
    # 获取根标签 data
    root = ET.XML(content)
    
    # 获取data标签的孩子标签
    for child in root:
      # child.tag = conntry 获取到两个country标签
      # child.attrib = {"name":"Liechtenstein"}
      print(child.tag, child.attrib)
      for node in child:
        print(node.tag, node.attrib, node.text) # 获取到reank标签
    from xml.etree import ElementTree as ET
    
    content = """
    <data>
      <country name="Liechtenstein">
        <rank>2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
      </country>
       <country name="Panama">
        <rank>69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
      </country>
    </data>
    """
    
    root = ET.XML(content)
    
    # 找到子子孙孙的year标签
    for child in root.iter('year'):
      print(child.tag, child.text)
    from xml.etree import ElementTree as ET
    
    content = """
    <data>
      <country name="Liechtenstein">
        <rank>2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
      </country>
       <country name="Panama">
        <rank>69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
      </country>
    </data>
    """
    
    root = ET.XML(content)
    v1 = root.findall('country') # 找到所有的country标签
    print(v1)
    
    v2 = root.find('country').find('rank') # 找到country标签中的rank标签
    print(v2.text)

    删除和修改节点

    from xml.etree import ElementTree as ET
    
    content = """
    <data>
      <country name="Liechtenstein">
        <rank>2</rank>
        <year>2023</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
      </country>
       <country name="Panama">
        <rank>69</rank>
        <year>2026</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
      </country>
    </data>
    """
    
    root = ET.XML(content)
    
    # 修改节点内容和属性
    rank = root.find('country').find('rank')
    print(rank.text)
    rank.text = "999" # 修改rank标签里面的内容
    rank.set('update', '2020-11-11') # 为rank标签新增一个update属性
    print(rank.text, rank.attrib)
    ############ 保存文件 ############
    tree = ET.ElementTree(root)
    tree.write("new.xml", encoding='utf-8')
    
    # 删除节点
    root.remove( root.find('country') )
    print(root.findall('country'))
    
    ############ 保存文件 ############
    tree = ET.ElementTree(root)
    tree.write("newnew.xml", encoding='utf-8')

    构建文档

    <home>
      <son name="儿1">
        <grandson name="儿11"></grandson>
        <grandson name="儿12"></grandson>
      </son>
      <son name="儿2"></son>
    </home>
    from xml.etree import ElementTree as ET
    
    # 创建根标签
    root = ET.Element("home")
    
    # 创建节点大儿子
    son1 = ET.Element('son', {'name': '儿1'})
    # 创建小儿子
    son2 = ET.Element('son', {"name": '儿2'})
    
    # 在大儿子中创建两个孙子
    grandson1 = ET.Element('grandson', {'name': '儿11'})
    grandson2 = ET.Element('grandson', {'name': '儿12'})
    son1.append(grandson1)
    son1.append(grandson2)
    
    # 把儿子添加到根节点中
    root.append(son1)
    root.append(son2)
    
    tree = ET.ElementTree(root)
    tree.write('oooo.xml', encoding='utf-8', short_empty_elements=False) #short_empty_elements 是否采取短标签的形式创建
    <famliy>
      <son name="儿1">
        <grandson name="儿11"></grandson>
        <grandson name="儿12"></grandson>
      </son>
      <son name="儿2"></son>
    </famliy>
    from xml.etree import ElementTree as ET
    
    # 创建根节点
    root = ET.Element("famliy")
    
    
    # 创建大儿子
    son1 = root.makeelement('son', {'name': '儿1'})
    # 创建小儿子
    son2 = root.makeelement('son', {"name": '儿2'})
    
    # 在大儿子中创建两个孙子
    grandson1 = son1.makeelement('grandson', {'name': '儿11'})
    grandson2 = son1.makeelement('grandson', {'name': '儿12'})
    
    son1.append(grandson1)
    son1.append(grandson2)
    
    
    # 把儿子添加到根节点中
    root.append(son1)
    root.append(son2)
    
    tree = ET.ElementTree(root)
    tree.write('oooo.xml',encoding='utf-8')
    <famliy>
    	<son name="儿1">
      	<age name="儿11">孙子</age>
      </son>
    	<son name="儿2"></son>
    </famliy>
    from xml.etree import ElementTree as ET
    
    
    # 创建根节点
    root = ET.Element("famliy")
    
    
    # 创建节点大儿子
    son1 = ET.SubElement(root, "son", attrib={'name': '儿1'})
    # 创建小儿子
    son2 = ET.SubElement(root, "son", attrib={"name": "儿2"})
    
    # 在大儿子中创建一个孙子
    grandson1 = ET.SubElement(son1, "age", attrib={'name': '儿11'})
    grandson1.text = '孙子'
    
    
    et = ET.ElementTree(root) #生成文档对象
    et.write("test.xml", encoding="utf-8")
    <user><![CDATA[你好呀]]</user>
    from xml.etree import ElementTree as ET
    
    # 创建根节点
    root = ET.Element("user")
    root.text = "<![CDATA[你好呀]]"
    
    et = ET.ElementTree(root) # 生成文档对象
    et.write("test.xml", encoding="utf-8")
    js
    下一篇:没有了