在 Python 中漂亮地列印 XML 輸出

Vaibhav Vaibhav 2024年2月16日
  1. 在 Python 中使用 BeautifulSoap 庫製作漂亮的 XML 輸出
  2. 在 Python 中使用 lxml 庫使 XML 輸出漂亮
在 Python 中漂亮地列印 XML 輸出

在讀取文字檔案、HTML 檔案、XML 檔案等時,檔案的內容結構很差,並且包含不一致的縮排。這種差異使得難以理解輸出。這個問題可以通過美化此類檔案的輸出來解決。美化包括修復不一致的縮排、去除隨機空格等。

在本文中,我們將學習如何使 XML 檔案輸出更漂亮。為了讓我們都在同一個頁面上,以下 Python 程式碼將考慮此 XML 檔案。如果你希望使用相同的檔案,你只需將 XML 內容複製到名為 books.xml 的新檔案中。

在 Python 中使用 BeautifulSoap 庫製作漂亮的 XML 輸出

BeautifulSoup 是一個基於 Python 的庫,用於解析 HTML 和 XML 檔案。它通常用於從網站和文件中抓取資料。我們可以使用這個庫來美化 XML 文件的輸出。

如果你的機器上沒有安裝此庫,請使用以下任一 pip 命令。

pip install beautifulsoup4
pip3 install beautifulsoup4

我們必須安裝另外兩個模組才能使用這個庫:html5liblxmlhtml5lib 庫是一個基於 Python 的庫,用於解析 HTML 或超文字標記語言文件。而且,lxml 庫是處理 XML 檔案的實用程式的集合。使用以下 pip 命令在你的機器上安裝這些庫。

pip install html5lib
pip install lxml 

請參考以下 Python 程式碼瞭解用法。

from bs4 import BeautifulSoup

filename = "./books.xml"
bs = BeautifulSoup(open(filename), "xml")
xml_content = bs.prettify()
print(xml_content)

輸出:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
 <book id="bk101">
  <author>
   Gambardella, Matthew
  </author>
  <title>
   XML Developer's Guide
  </title>
  <genre>
   Computer
  </genre>
  <price>
   44.95
  </price>
  <publish_date>
   2000-10-01
  </publish_date>
  <description>
   An in-depth look at creating applications
    with XML.
  </description>
 </book>
 
 ...

 <book id="bk111">
  <author>
   O'Brien, Tim
  </author>
  <title>
   MSXML3: A Comprehensive Guide
  </title>
  <genre>
   Computer
  </genre>
  <price>
   36.95
  </price>
  <publish_date>
   2000-12-01
  </publish_date>
  <description>
   The Microsoft MSXML3 parser is covered in
    detail, with attention to XML DOM interfaces, XSLT processing,
    SAX and more.
  </description>
 </book>
 <book id="bk112">
  <author>
   Galos, Mike
  </author>
  <title>
   Visual Studio 7: A Comprehensive Guide
  </title>
  <genre>
   Computer
  </genre>
  <price>
   49.95
  </price>
  <publish_date>
   2001-04-16
  </publish_date>
  <description>
   Microsoft Visual Studio 7 is explored in depth,
    looking at how Visual Basic, Visual C++, C#, and ASP+ are
    integrated into a comprehensive development
    environment.
  </description>
 </book>
</catalog>

上面的程式碼認為 books.xml 檔案位於當前工作目錄中。或者,我們也可以在 filename 變數中設定檔案的完整路徑。prettify() 函式美化了 XML 檔案的輸出。請注意,為了便於理解,已對輸出進行了修剪。

在 Python 中使用 lxml 庫使 XML 輸出漂亮

我們可以單獨使用 lxml 庫來美化 XML 檔案的輸出。請參閱以下 Python 程式碼。

from lxml import etree

filename = "./books.xml"
f = etree.parse(filename)
content = etree.tostring(f, pretty_print=True, encoding=str)
print(content)

輸出:

<?xml version="1.0" encoding="utf-8"?>
<catalog>
 <book id="bk101">
  <author>
   Gambardella, Matthew
  </author>
  <title>
   XML Developer's Guide
  </title>
  <genre>
   Computer
  </genre>
  <price>
   44.95
  </price>
  <publish_date>
   2000-10-01
  </publish_date>
  <description>
   An in-depth look at creating applications
    with XML.
  </description>
 </book>
 
 ...

 <book id="bk111">
  <author>
   O'Brien, Tim
  </author>
  <title>
   MSXML3: A Comprehensive Guide
  </title>
  <genre>
   Computer
  </genre>
  <price>
   36.95
  </price>
  <publish_date>
   2000-12-01
  </publish_date>
  <description>
   The Microsoft MSXML3 parser is covered in
    detail, with attention to XML DOM interfaces, XSLT processing,
    SAX and more.
  </description>
 </book>
 <book id="bk112">
  <author>
   Galos, Mike
  </author>
  <title>
   Visual Studio 7: A Comprehensive Guide
  </title>
  <genre>
   Computer
  </genre>
  <price>
   49.95
  </price>
  <publish_date>
   2001-04-16
  </publish_date>
  <description>
   Microsoft Visual Studio 7 is explored in depth,
    looking at how Visual Basic, Visual C++, C#, and ASP+ are
    integrated into a comprehensive development
    environment.
  </description>
 </book>
</catalog>

注意 pretty_print = True 引數。這個標誌使輸出更漂亮。

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

相關文章 - Python XML