python 之xml 使用原生xml.dom

一、xml操作
  • 使用xml进行创建

    cpp 复制代码
    <Placemark id="placemark_id">
      <name>模型</name>
      <Location>
        <longitude>121.6097139799135</longitude>
      </Location>
    </Placemark>
    cpp 复制代码
    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="  "))
二、获取值、修改值
  • 直接获取数据

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

    cpp 复制代码
    location_node = root_elem.getElementsByTagName('Location')[0]
    lon = location_node.getElementsByTagName('longitude')[0].firstChild.nodeValue
  • 重新赋值

    cpp 复制代码
    lon_elem.firstChild.nodeValue = '114.1284142342'
  • 添加子节点

    cpp 复制代码
    # 设置纬度
    lat_elem = doc1.createElement("latitude")
    lat_elem.appendChild(doc1.createTextNode("24.67367524368988"))
    location_elem.appendChild(lat_elem)
三、将一个xml文档,插入另一文档中(将一个节点值插入另一个节点)
cpp 复制代码
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)  # 添加到根节点
  • 将一个xml文档某个元素插入另一个文档,插入另一文档中

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

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

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

    cpp 复制代码
    直接通过已经存在的引用导入节点
    imported_root2_elem = doc1.importNode(root2_elem, deep=True)
    location_elem.appendChild(imported_root2_elem)
    cpp 复制代码
    通过查询XML文档的根元素来导入节点
    imported_doc2_elem = doc1.importNode(doc2.documentElement, deep=True)
    location_elem.appendChild(imported_doc2_elem)
相关推荐
没烦恼301几秒前
无痕模式下 HTTP\-First 拦截引发的“页面刷新”误判
前端
文心快码BaiduComate5 分钟前
从个人提效到组织提效:Comate辅助构建自我进化的AI研发系统
前端·程序员
hunterandroid1 小时前
Compose 状态管理:remember、rememberSaveable 与状态提升
前端
星栈1 小时前
Dioxus 接数据库最容易写歪的 3 个地方:sqlx + SQLite 怎么接才顺
前端·rust·前端框架
晴虹1 小时前
vue3-scroll-more:横向滚动条-元素或页签过多滚动显示处理的组件
前端·vue.js
代码搬运媛1 小时前
Claude 全栈开发专用 Rules 配置
前端
PedroQue991 小时前
uni-router v1.7.0重磅更新:守卫重定向自由掌控
前端·uni-app
逸铭1 小时前
Day 4:登录与 Token——桌面端怎么存密钥
前端·客户端
溯朢1 小时前
TokUI 流式渲染的 SSE 全链路拆解
前端
京东云开发者1 小时前
京东 Oxygen xLLM 大模型推理引擎正式捐赠开放原子开源基金会,共建国产 AI Infra 生态
前端