首頁 > 後端開發 > Python教學 > 在Python中漂亮地列印XML

在Python中漂亮地列印XML

WBOY
發布: 2023-09-07 19:41:02
轉載
1100 人瀏覽過

在Python中漂亮地列印XML

在Python中處理XML資料時,確保其可讀性和結構可以大幅增強程式碼的理解和可維護性。對XML進行漂亮列印,即使用適當的縮排和換行進行格式化,是實現這些目標的有價值的技術。

在本文中,我們將探討兩種使用 Python 漂亮列印 XML 的不同方法:xml.dom.minidom 和 xml.etree.ElementTree。透過了解這些方法,開發人員可以有效地以有組織且具有視覺吸引力的方式呈現 XML 數據,從而更輕鬆地進行分析和操作。

如何在Python中漂亮地列印XML?

以下是我們可以在 Python 中執行漂亮列印的兩種方法 -

方法一:使用xml.dom.minidom

    以下是我們將使用xml.dom.minidom執行漂亮列印的步驟 -
  • 導入所需的模組:我們首先導入「xml.dom.minidom」模組,該模組提供用於 XML 解析的文檔物件模型 (DOM) API 的輕量級實作。
  • 定義`pretty_print_xml_minidom`函數:函數接受一個XML字串作為輸入,並負責使用`xml.dom.minidom`解析和美化列印XML。
  • 解析XML字串:在`pretty_print_xml_minidom`函數內部,我們使用`xml.dom.minidom.parseString()`方法解析XML字串並建立DOM物件。
  • 漂亮列印 XML:接下來,我們在 DOM 物件上使用「toprettyxml()」方法來產生漂亮列印的 XML 字串。我們傳遞值為「」」的「indent」參數來指定所需的縮排等級(本例為兩個空格)。
  • 刪除空白行:預設情況下,`toprettyxml()` 在輸出中新增空白行。為了刪除這些空白行,我們用換行符 (`\n`) 分割漂亮的 XML 字串,刪除每行中的任何前導或尾隨空格,然後將非空白行重新連接在一起。
  • 列印漂亮的 XML:最後,我們列印產生的漂亮的 XML 字串。

程式2:使用xml.etree.ElementTree

    以下是我們使用 xml.etree.ElementTree 執行漂亮列印時將遵循的步驟 -
  • 導入所需模組:我們首先導入

    `xml.etree.ElementTree`
  • 模組,該模組提供了一個快速且有效率的API,用於解析和操作XML。
  • 定義`indent`函數:這是一個自訂函數,用於遞歸地向XML元素新增縮排。它接受一個`elem`參數(XML元素)和一個可選的

    `level`
  • 參數來指定目前的縮排等級(預設為0)。
  • 縮排XML:在`indent` 函數中,我們透過修改`text``tail` 新增縮排> XML元素的屬性。 `text` 屬性表示緊接開始標記之後的文本,

    `tail`
  • 屬性表示緊接結束標記之前的文字。透過向這些屬性添加縮進,我們實現了漂亮的列印。
  • 定義 `pretty_print_xml_elementtree` 函數:此函數將 XML 字串作為輸入,並負責使用

    `xml.etree.ElementTree` 解析和漂亮列印 XML。
  • #解析XML字串:在`pretty_print_xml_elementtree`函數內部,我們使用

    `ET.fromstring()`
  • 方法解析XML字串並建立一個ElementTree物件。
  • 縮排 XML:我們在 XML 的根元素上呼叫

    `indent()`
  • 函數,以遞歸方式將縮排到所有元素。
  • 將 XML 元素轉換回字串:我們使用 `ET.tostring()` 方法將 XML 元素轉換回字串表示形式。我們傳遞值為

    `"unicode"`
  • 的 `encoding` 參數,以確保結果字串的正確編碼。
  • 列印漂亮的 XML:最後,我們列印產生的漂亮的 XML 字串。

這兩個程式提供了不同的方法來實現XML的漂亮列印。第一個程式利用`xml.dom.minidom`提供的DOM API來解析並漂亮列印XML,而第二個程式使用

`xml.etree.ElementTree`

模組,並定義了一個自訂函數來遞歸地為XML元素新增縮排。

以下是使用上述兩種方法的程式範例 -

方案1:使用xml.dom.minidom

import xml.dom.minidom

def pretty_print_xml_minidom(xml_string):
   # Parse the XML string
   dom = xml.dom.minidom.parseString(xml_string)

   # Pretty print the XML
   pretty_xml = dom.toprettyxml(indent="  ")

   # Remove empty lines
   pretty_xml = "\n".join(line for line in pretty_xml.split("\n") if line.strip())

   # Print the pretty XML
   print(pretty_xml)

# Example usage
xml_string = '''
<root>
  <element attribute="value">
   <subelement>Text</subelement>
  </element>
</root>
'''

pretty_print_xml_minidom(xml_string)
登入後複製

輸出

<?xml version="1.0" ?>
<root>
  <element attribute="value">
   <subelement>Text</subelement>
  </element>
</root>
登入後複製

程式2:使用xml.etree.ElementTree

import xml.etree.ElementTree as ET

def indent(elem, level=0):
   # Add indentation
   indent_size = "  "
   i = "\n" + level * indent_size
   if len(elem):
      if not elem.text or not elem.text.strip():
         elem.text = i + indent_size
      if not elem.tail or not elem.tail.strip():
         elem.tail = i
      for elem in elem:
         indent(elem, level + 1)
      if not elem.tail or not elem.tail.strip():
         elem.tail = i
   else:
      if level and (not elem.tail or not elem.tail.strip()):
         elem.tail = i

def pretty_print_xml_elementtree(xml_string):
   # Parse the XML string
   root = ET.fromstring(xml_string)

   # Indent the XML
   indent(root)

   # Convert the XML element back to a string
   pretty_xml = ET.tostring(root, encoding="unicode")

   # Print the pretty XML
   print(pretty_xml)

# Example usage
xml_string = '''
<root>
  <element attribute="value">
   <subelement>Text</subelement>
  </element>
</root>
'''

pretty_print_xml_elementtree(xml_string)
登入後複製

輸出

<root>
  <element attribute="value">
   <subelement>Text</subelement>
  </element>
</root>
登入後複製
###結論### ###總而言之,在 Python 中漂亮地列印 XML 對於提高 XML 資料的可讀性和結構至關重要。無論是使用 xml.dom.minidom 或 xml.etree.ElementTree 函式庫,開發人員都可以輕鬆地使用適當的縮進來格式化 XML。透過採用這些技術,程式設計師在 Python 專案中處理 XML 資料時可以增強程式碼理解、簡化偵錯並促進更好的協作。 ###

以上是在Python中漂亮地列印XML的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板