目录

第一部分:高级节点操作与遍历方法

1.1 更精确的节点导航

1.2 使用 cloneNode() 复制节点

1.3 节点插入、替换与高级管理

第二部分:文档创建与高级输出控制

2.1 使用 Document 工厂方法完整创建文档

2.2 高级输出与序列化控制

第三部分:实用工具函数与模式处理

3.1 处理空白文本节点的实用函数集

3.2 处理文档类型定义(DTD)

第四部分:模拟ARXML操作

第五部分:性能优化与最佳实践

5.1 内存管理

5.2 选择性解析

总结


访问上一篇:​​​​​​Python与XML文件处理详解(2):使用xml.dom.minidom模块处理XML

第一部分:高级节点操作与遍历方法

        除了基础的 getElementsByTagNameminidom 提供了更多定位和操作节点的工具。

1.1 更精确的节点导航

        在处理由工具生成的XML(如ARXML)时,其结构往往是可预测的。利用这一点,我们可以进行精确导航。

import xml.dom.minidom as minidomdom = minidom.parse('books.xml')
root = dom.documentElement# 假设我们知道第一个book元素下第一个元素是author
first_book = root.getElementsByTagName('book')[0]
first_child_of_book = first_book.firstChild# 但firstChild可能是文本节点(换行符),我们需要找到第一个元素节点
first_element_child = first_book.firstChild
while first_element_child is not None and first_element_child.nodeType != first_element_child.ELEMENT_NODE:first_element_child = first_element_child.nextSiblingprint(f"第一个元素子节点的标签是: {first_element_child.tagName}") # 输出: author# 编写一个通用函数来获取第一个元素子节点
def get_first_element_child(node):child = node.firstChildwhile child is not None:if child.nodeType == child.ELEMENT_NODE:return childchild = child.nextSiblingreturn Noneauthor_node = get_first_element_child(first_book)

1.2 使用 cloneNode() 复制节点

        这在需要复制一个复杂节点结构时非常有用,例如在ARXML中复制一个ECU配置模板。

# 深度复制第一个book元素及其所有子孙节点
book_clone = first_book.cloneNode(deep=True)# 修改克隆体的ID,避免冲突
book_clone.setAttribute('id', 'bk103_clone')# 将克隆体添加到文档中
root.appendChild(book_clone)# 浅复制(deep=False)只复制元素本身,不复制其子节点。适用于创建空模板。
empty_book_template = first_book.cloneNode(deep=False)
empty_book_template.setAttribute('id', 'new_template')
# 此时 empty_book_template 没有 author, title 等子元素

1.3 节点插入、替换与高级管理

# 创建一个新的price元素
new_price = dom.createElement('price')
new_price.appendChild(dom.createTextNode('75.00'))# --- 在特定位置插入 ---
# 在author节点之后插入new_price
# 首先需要找到参考节点(author)和父节点
ref_node = first_book.getElementsByTagName('author')[0]
first_book.insertBefore(new_price, ref_node.nextSibling) # 插入到author之后# --- 替换节点 ---
old_price = first_book.getElementsByTagName('price')[1] # 假设有第二个price
first_book.replaceChild(new_price, old_price) # 用new_price替换old_price# --- 检查节点关系 ---
# 判断一个节点是否包含另一个节点
contains = first_book.hasChildNodes() # True
is_contained = new_price.parentNode.isSameNode(first_book) # True# 获取同级节点中的下一个元素节点(跳过文本节点)
def get_next_element_sibling(node):sibling = node.nextSiblingwhile sibling is not None:if sibling.nodeType == sibling.ELEMENT_NODE:return siblingsibling = sibling.nextSiblingreturn Nonenext_ele = get_next_element_sibling(ref_node) # 获取author后面的元素,可能是title
</

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96268.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96268.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96268.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用 ChatGPT 辅助写作

引言 介绍人工智能辅助写作的兴起&#xff0c;ChatGPT 在写作领域的应用潜力&#xff0c;以及本文的核心目标。 ChatGPT 在写作中的核心功能 概述 ChatGPT 的主要功能&#xff0c;包括文本生成、润色、结构优化、灵感激发等。 利用 ChatGPT 辅助写作的具体方法 生成创意与灵感 …

【有鹿机器人自述】我在社区的365天:扫地、卖萌、治愈人心

大家好&#xff0c;我是有鹿巡扫机器人&#xff0c;编号RD-07。今天我想和大家分享这一年来的工作见闻——没错&#xff0c;我们机器人也会"观察"和"感受"&#xff0c;尤其是在连合直租将我送到这个社区后&#xff0c;发生的点点滴滴让我拥有了前所未有的&…

第五十五天(SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错复盘)

#数据库知识&#xff1a; 1、数据库名&#xff0c;表名&#xff0c;列名&#xff0c;数据 2、自带数据库&#xff0c;数据库用户及权限 3、数据库敏感函数&#xff0c;默认端口及应用 4、数据库查询方法&#xff08;增加删除修改更新&#xff09; #SQL注入产生原理&#xf…

怎么用 tauri 创建一个桌面应用程序(Electron)

以前用 Electron 做过一个桌面应用程序&#xff0c;打包体积确实很大&#xff0c;启动也很慢。这次先 tauri。 并且用 bun 代替 npm 速度更快&#xff0c;避免总是出现依赖问题。 前端用 react 为了学习下&#xff0c;用 js 先现在主流的 typescript。 安装 bun npm instal…

【通过Docker快速部署Tomcat9.0】

文章目录前言一、部署docker二、部署Tomcat2.1 创建存储卷2.2 运行tomcat容器2.3 查看tomcat容器2.4 查看端口是否监听2.5 防火墙开放端口三、访问Tomcat前言 Tomcat介绍 Tomcat 是由 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;开发的一个开源 Jav…

LabVIEW UI 分辨率适配

针对 LabVIEW UI 在不同分辨率下的适配&#xff0c;现有方案分三类&#xff1a;一是现有 VI 可通过 “VI 属性 - 窗口大小” 勾选比例保持或控件缩放选项快速调整&#xff0c;也可取消勾选或换等宽字体防控件移位&#xff1b;二是项目初期以最低目标分辨率为基准&#xff0c;用…

国产化FPGA开发板:2050-基于JFMK50T4(XC7A50T)的核心板

&#xff08;IEB-PS-3051-邮票孔&#xff09; 一、核心板概述 板卡基于JFMK50T4国产化FPGA芯片&#xff0c;设计的一款工业级核心板&#xff0c;板卡集成主芯片、电源、DDR、配置芯片&#xff0c;大大减轻客户的扩展开发困难。丰富的IO和4个GTP&#xff0c;让用户轻…

Webpack 核心原理剖析

时至今日&#xff0c;Webpack 已迭代到 5.x 版本&#xff0c;其功能模块的扩充和复杂度的提升使得源码学习成本陡增。官方文档的晦涩表述更是让许多开发者望而却步。然而&#xff0c;理解 Webpack 的核心原理对优化构建流程、定制化打包方案至关重要。本文将通过简化流程和代码…

移植Qt4.8.7到ARM40-A5

移植Qt4.8.7到ARM40-A5 主机平台&#xff1a;Ubuntu 16.04 LTS(x64) 目标平台&#xff1a;ARM40-A5 Qt版本&#xff1a;Qt4.8.7 ARM GCC编译工具链&#xff1a; arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 ----------## Qt移植步骤 ## 1、了解Ubuntu&am…

C++_哈希

1. unordered系列关联式容器在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时效率可达到$log_2 N$&#xff0c;即最差情况下需要比较红黑树的高度次&#xff0c;当树中的节点非常多时&#xff0c;查询效率也不理想。最好 的查询是&#xf…

Redis 内存管理机制:深度解析与性能优化实践

&#x1f9e0; Redis 内存管理机制&#xff1a;深度解析与性能优化实践 文章目录&#x1f9e0; Redis 内存管理机制&#xff1a;深度解析与性能优化实践&#x1f9e0; 一、Redis 内存架构全景&#x1f4a1; Redis 内存组成结构&#x1f4ca; 内存占用分布示例⚙️ 二、内存分配…

cargs: 一个轻量级跨平台命令行参数解析库

目录 1.简介 2.安装与集成 3.项目的目录结构及介绍 4.核心数据结构与函数 5.基本使用示例 6.应用案例和最佳实践 7.高级用法 8.与其他库的对比 9.总结 1.简介 cargs 是一个轻量级、无依赖的 C 语言命令行参数解析库&#xff0c;虽然本身是 C 库&#xff0c;但可以无缝…

【数学建模】质量消光系数在烟幕遮蔽效能建模中的核心作用

前言&#xff1a;欢迎各位光临本博客&#xff0c;这里小编带你直接手撕质量相关系数&#xff0c;文章并不复杂&#xff0c;愿诸君耐其心性&#xff0c;忘却杂尘&#xff0c;道有所长&#xff01;&#xff01;&#xff01;&#xff01; **&#x1f525;个人主页&#xff1a;IF’…

Java代码审计实战:XML外部实体注入(XXE)深度解析

Java代码审计实战&#xff1a;XML外部实体注入&#xff08;XXE&#xff09;深度解析XML外部实体注入&#xff08;XXE&#xff09;是Web应用程序中一种常见但又常常被忽视的漏洞。它利用了XML解析器解析XML文档时&#xff0c;允许引用外部实体这个特性。如果解析器没有禁用外部实…

当服务器出现网卡故障时如何检测网卡硬件故障并解决?

当服务器出现网卡故障时&#xff0c;可能导致网络通信中断&#xff0c;从而影响业务的正常运行。以下是检测网卡硬件故障、诊断问题并解决的详细方法和步骤。1. 网卡故障的常见表现1.1 硬件故障的常见症状网络无法连接&#xff1a;服务器无法访问外部网络或用户无法连接到服务器…

从车辆中心到用户中心:E/E架构的变革与挑战

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

RPC内核细节(转载)

RPC内核细节(转载) 背景 随着数据量、并发量、业务复杂度的增长&#xff0c;服务化是架构演进必由之路。服务化离不开RPC框架。 RPC服务化的好处 服务化的一个好处就是&#xff0c;不限定服务的提供方使用什么技术选型&#xff0c;能够实现大公司跨团队的技术解耦。 如下图…

SpringAMQP 的发布方确认

前言 这里的发布方确认是以 SpringAMQP 写的&#xff0c;之前我们在前面的篇章中就学过了 使用 Java 原生的SDK编写&#xff0c;当时是发布确认模式&#xff0c;在这里我们将用 Spring 集成的 rabbitmq 方法来编写 开启发布者确认机制需要进行下面的配置&#xff0c;以 yml 为例…

一套自用的git提交规范,可清晰的识别到关联的任务/bug

分享一套自用的git提交规范&#xff0c;可清晰的识别到关联的任务/bug 一、提交信息的基本结构 推荐使用约定式提交的一种变体&#xff0c;结构如下&#xff1a; <类型>(<范围>): <主题> [#<禅道-ID>]<正文>&#xff08;可选&#xff09;<脚注…

从音频到文本实现高精度离线语音识别

会议频繁&#xff0c;记录繁琐&#xff1f;语音转换成文字工具价格高昂&#xff0c;自己手动整理又耗时费力&#xff1f; 它支持本地离线运行&#xff0c;无需联网&#xff0c;所有数据留在本地&#xff0c;隐私安全毫无顾虑&#xff0c;同时它的功能是实时语音转文字&#xf…