Python與XML文件處理詳解(2續):xml.dom.minidom模塊高階使用方法

目錄

第一部分:高級節點操作與遍歷方法

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…