• 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
  • 相关阅读:
    Prometheus|云原生|grafana的admin用户密码重置备忘记录
    跨境电商:YouTube视频营销必看攻略
    zookeeper安装教程(Windows)
    Apache Druid 数据摄取---本地数据和kafka流式数据
    Axure学习记录(菜单下拉/收起效果)
    从零开始搭建仿抖音短视频APP--开发用户业务模块(4)
    2024年第八届人工智能与虚拟现实国际会议(AIVR 2024)即将召开!
    Aspose.Words for .NET图像处理教程——在Word文档的页面上插入条形码
    浅谈MySQL的sql_mode
    gd32部分映射1/2,完全映射,备用功能选择等
  • 原文地址:https://blog.csdn.net/a6864657/article/details/133780629