• python 之xml 使用原生xml.dom


    一、xml操作
    • 使用xml进行创建
      <Placemark id="placemark_id">
        <name>模型</name>
        <Location>
          <longitude>121.6097139799135</longitude>
        </Location>
      </Placemark>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      from xml.dom import minidom
      
      # 创建一个新的XML文档
      doc1 = minidom.Document()
      
      # 创建根元素并设置其属性
      root1_elem = doc1.createElement("Placemark")
      root1_elem.setAttribute("id", "mode_placemark_id")
      doc1.appendChild(root1_elem)
      
      # 创建<name>元素并添加到根元素, 值为模型
      name_elem = doc1.createElement("name")
      name_elem.appendChild(doc1.createTextNode("模型"))
      root1_elem.appendChild(name_elem)
      
      # 创建<Location>元及其子元素
      location_elem = doc1.createElement("Location")
      root1_elem.appendChild(location_elem)
      
      # 设置经度
      lon_elem = doc1.createElement("longitude")
      lon_elem.appendChild(doc1.createTextNode("121.6097139799135"))
      location_elem.appendChild(lon_elem)
      
      print(doc1.toprettyxml(indent="  "))
      
      • 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
    二、获取值、修改值
    • 直接获取数据

      lon = lon_elem.firstChild.nodeValue
      lon = doc.getElementsByTagName('longitude')[0].firstChild.nodeValue
      
      • 1
      • 2
    • 通过父节点定义子节点 并获取值

      location_node = root_elem.getElementsByTagName('Location')[0]
      lon = location_node.getElementsByTagName('longitude')[0].firstChild.nodeValue
      
      • 1
      • 2
    • 重新赋值

      lon_elem.firstChild.nodeValue = '114.1284142342'
      
      • 1
    • 添加子节点

      # 设置纬度
      lat_elem = doc1.createElement("latitude")
      lat_elem.appendChild(doc1.createTextNode("24.67367524368988"))
      location_elem.appendChild(lat_elem)
      
      • 1
      • 2
      • 3
      • 4
    三、将一个xml文档,插入另一文档中(将一个节点值插入另一个节点)
    • doc2 = minidom.Document()
      # 创建根节点
      root2_elem = doc2.createElement("Root")
      doc2.appendChild(root2_elem)
      
      alt_elem = doc2.createElement("altitude")
      alt_elem.appendChild(doc2.createTextNode('118'))
      root2_elem.appendChild(alt_elem)  # 添加到根节点
      
      range_elem = doc2.createElement("range")
      range_elem.appendChild(doc2.createTextNode('0'))
      root2_elem.appendChild(range_elem)  # 添加到根节点
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    • 将一个xml文档某个元素插入另一个文档,插入另一文档中

      将alt_elem 插入到doc1
      imported_alt_elem = doc1.importNode(alt_elem, deep=True)
      location_elem.appendChild(imported_alt_elem)
      
      • 1
      • 2
      • 3
      将root2_elem及其下的子元素 插入到doc1
      imported_root_elem_other = doc1.importNode(root2_elem, deep=True)
      location_elem.appendChild(imported_root_elem_other)
      
      • 1
      • 2
      • 3
    • 将另个文档中的节点,插入指定节点

      将imported_alt_elem 节点插入 lon_elem 的前面
      imported_alt_elem = doc1.importNode(alt_elem, deep=True)
      location_elem.insertBefore(imported_alt_elem, lon_elem)
      
      • 1
      • 2
      • 3
      将imported_alt_elem 放到 lat_elem 的后面
      imported_alt_elem = doc1.importNode(alt_elem, deep=True)
      location_elem.insertBefore(imported_alt_elem, lat_elem.nextSibling)
      
      • 1
      • 2
      • 3
      将imported_alt_elem 放到 lon_elem 的后面
      imported_alt_elem = doc1.importNode(alt_elem, deep=True)
      location_elem.insertBefore(imported_alt_elem, lon_elem.nextSibling)
      
      • 1
      • 2
      • 3
    • 将一个文档下的子节点放入另外一个节点

      # 遍历root2_elem的所有子元素
      for child in root2_elem.childNodes:
          # 导入子元素到doc1
          imported_child = doc1.importNode(child, deep=True)
          # 将导入的子元素添加到location_elem中
          location_elem.appendChild(imported_child)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 将某个文档直接插入另一个文档的某个节点下

      直接通过已经存在的引用导入节点
      imported_root2_elem = doc1.importNode(root2_elem, deep=True)
      location_elem.appendChild(imported_root2_elem)
      
      • 1
      • 2
      • 3
      通过查询XML文档的根元素来导入节点
      imported_doc2_elem = doc1.importNode(doc2.documentElement, deep=True)
      location_elem.appendChild(imported_doc2_elem)
      
      • 1
      • 2
      • 3
  • 相关阅读:
    python装饰器的使用方法
    10贪心:柠檬水找零
    P2763 试题库问题
    【深度学习进阶-自然语言处理】第一章:神经网络的复习
    redis变慢原因记录
    Bootloader概述和Uboot
    金融行业蓄电池监控,究竟有多厉害!
    在 Azure AKS 上部署 EMQX MQTT 服务器集群
    vue项目中常见的三种文件类型在线预览实现(pdf/word/excel表格)
    看这家造酒厂如何利用低代码开发框架筑牢数据根基,实现数字化转型
  • 原文地址:https://blog.csdn.net/a6864657/article/details/133780629