如何使用python的xml庫實現(xiàn)自閉合標(biāo)簽
前言
最近一段時間一直想要寫一個urdf格式化插件。
至于為什么嘛,因為使用sw2urdf插件,導(dǎo)出的urdf,同一標(biāo)簽的內(nèi)容,是跨行的,這就導(dǎo)致,內(nèi)容比較亂,而且行數(shù)比較多。影響閱讀。
因此,自己想寫格式化的腳本。
最近就開始分享一些,之前的思考。
正文
import xml.etree.ElementTree as ET def pretty_print(element, level=0, indent=" "): """ 手動格式化 XML 數(shù)據(jù),添加縮進(jìn)并將空元素轉(zhuǎn)換為自閉合標(biāo)簽。 :param element: XML 元素 :param level: 當(dāng)前縮進(jìn)級別 :param indent: 縮進(jìn)字符(默認(rèn)為兩個空格) :return: 格式化后的 XML 字符串 """ result = "" if len(element) == 0: # 如果沒有子元素,即可能是空元素 if element.text and element.text.strip(): # 如果有文本內(nèi)容 result += f"{indent * level}<{element.tag}>{element.text.strip()}</{element.tag}>\n" else: result += f"{indent * level}<{element.tag} " # 如果有屬性,添加到標(biāo)簽中 if element.attrib: result += " ".join([f'{key}="{value}"' for key, value in element.attrib.items()]) result += " />\n" # 使用自閉合標(biāo)簽形式 else: result += f"{indent * level}<{element.tag}" # 如果有屬性,添加到標(biāo)簽中 if element.attrib: result += " " + " ".join([f'{key}="{value}"' for key, value in element.attrib.items()]) result += ">\n" # 處理元素的文本內(nèi)容 if element.text and element.text.strip(): result += f"{indent * (level + 1)}{element.text.strip()}\n" # 遞歸處理子元素 for child in element: result += pretty_print(child, level + 1, indent) # 處理結(jié)束標(biāo)簽 result += f"{indent * level}</{element.tag}>\n" return result # 讀取 XML 文件 file_path = 'test.urdf' # 請將此路徑替換為實際的文件路徑 tree = ET.parse(file_path) root = tree.getroot() # 直接格式化 root 元素,而不需要創(chuàng)建新的根節(jié)點 formatted_xml = pretty_print(root) # 打印格式化后的 XML print(formatted_xml) with open('test_pretty.urdf', 'w') as f: f.write(formatted_xml)
這里,代碼主要是通過xml.etree.ElementTree
解析xml文件。
然后在函數(shù)中補(bǔ)充上空格,<
,/>
等標(biāo)簽。
注意,這個函數(shù)是個遞歸的函數(shù),會在函數(shù)內(nèi)部調(diào)用函數(shù)本身。
實現(xiàn)的效果如下
可以發(fā)現(xiàn),目前的問題是:
- 沒有注釋
- urdf最開始的標(biāo)簽,不見了。
到此這篇關(guān)于使用python的xml庫實現(xiàn)自閉合標(biāo)簽的文章就介紹到這了,更多相關(guān)python xml庫自閉合標(biāo)簽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python使用xlsx和pandas處理Excel表格的操作步驟
python的神器pandas庫就可以非常方便地處理excel,csv,矩陣,表格 等數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于python使用xlsx和pandas處理Excel表格的操作步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01pandas DataFrame 交集并集補(bǔ)集的實現(xiàn)
這篇文章主要介紹了pandas DataFrame 交集并集補(bǔ)集的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Python周期任務(wù)神器之Schedule模塊使用詳解
這篇文章主要為大家詳細(xì)介紹了Python中的周期任務(wù)神器—Schedule模塊的安裝和初級、進(jìn)階使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-04-04python數(shù)據(jù)類型之間怎么轉(zhuǎn)換技巧分享
在本篇文章里小編給大家分享的是關(guān)于python數(shù)據(jù)類型之間怎么轉(zhuǎn)換實例以及小技巧內(nèi)容,有興趣的朋友們參考下。2019-08-08python框架flask入門之環(huán)境搭建及開啟調(diào)試
這篇文章主要介紹了python框架flask入門環(huán)境搭建及開啟調(diào)試的步驟設(shè)置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06