您的位置:首页 > 新闻 > 热点要闻 > Python 如何创建和解析 XML 文件

Python 如何创建和解析 XML 文件

2025/4/3 9:16:14 来源:https://blog.csdn.net/Itmastergo/article/details/141251315  浏览:    关键词:Python 如何创建和解析 XML 文件

XML(可扩展标记语言)是一种广泛使用的标记语言,主要用于存储和传输数据。它具有结构化、层次化的特点,常被用作数据交换格式。Python 提供了多种工具和库来处理 XML 文件,包括创建、解析和操作 XML 文档。

一、XML 简介

XML 是一种用于描述结构化数据的标记语言,其设计目的是让人和机器都可以轻松读取和处理数据。一个典型的 XML 文件由多个嵌套的元素组成,每个元素都有一个开始标签和一个结束标签,中间包含数据或其他元素。

例如,一个简单的 XML 文件可能是这样的:

<bookstore><book><title>Python Programming</title><author>John Doe</author><price>29.99</price></book><book><title>Learning XML</title><author>Jane Doe</author><price>39.95</price></book>
</bookstore>

在这个示例中,<bookstore> 是根元素,它包含了两个 <book> 元素,每个 <book> 元素包含三个子元素:<title><author><price>

二、在 Python 中创建 XML 文件

Python 提供了多种方法来创建 XML 文件,常用的方法包括使用 xml.etree.ElementTree 模块和 minidom 模块。

1. 使用 xml.etree.ElementTree 创建 XML 文件

xml.etree.ElementTree 是 Python 标准库中的一个模块,用于生成和解析 XML。我们可以使用它轻松创建一个 XML 文档。

以下是一个使用 ElementTree 创建 XML 文件的示例:

import xml.etree.ElementTree as ET# 创建根元素
root = ET.Element("bookstore")# 创建第一个书籍元素
book1 = ET.SubElement(root, "book")
title1 = ET.SubElement(book1, "title")
title1.text = "Python Programming"
author1 = ET.SubElement(book1, "author")
author1.text = "John Doe"
price1 = ET.SubElement(book1, "price")
price1.text = "29.99"# 创建第二个书籍元素
book2 = ET.SubElement(root, "book")
title2 = ET.SubElement(book2, "title")
title2.text = "Learning XML"
author2 = ET.SubElement(book2, "author")
author2.text = "Jane Doe"
price2 = ET.SubElement(book2, "price")
price2.text = "39.95"# 创建 XML 树结构
tree = ET.ElementTree(root)# 将 XML 树写入文件
tree.write("bookstore.xml", encoding="utf-8", xml_declaration=True)

在这个示例中,我们首先创建了一个根元素 <bookstore>,然后为每本书创建了一个 <book> 元素,并为每本书添加了 <title><author><price> 子元素。最后,我们使用 ElementTree.write 方法将 XML 树保存到文件中。

2. 使用 minidom 创建 XML 文件

minidom 是一个用于处理 XML 的轻量级 DOM 实现,可以让我们更灵活地操作 XML 文档。

以下是一个使用 minidom 创建 XML 文件的示例:

from xml.dom.minidom import Document# 创建文档对象
doc = Document()# 创建根元素
root = doc.createElement("bookstore")
doc.appendChild(root)# 创建第一个书籍元素
book1 = doc.createElement("book")
root.appendChild(book1)title1 = doc.createElement("title")
title1.appendChild(doc.createTextNode("Python Programming"))
book1.appendChild(title1)author1 = doc.createElement("author")
author1.appendChild(doc.createTextNode("John Doe"))
book1.appendChild(author1)price1 = doc.createElement("price")
price1.appendChild(doc.createTextNode("29.99"))
book1.appendChild(price1)# 创建第二个书籍元素
book2 = doc.createElement("book")
root.appendChild(book2)title2 = doc.createElement("title")
title2.appendChild(doc.createTextNode("Learning XML"))
book2.appendChild(title2)author2 = doc.createElement("author")
author2.appendChild(doc.createTextNode("Jane Doe"))
book2.appendChild(author2)price2 = doc.createElement("price")
price2.appendChild(doc.createTextNode("39.95"))
book2.appendChild(price2)# 将 XML 文档写入文件
with open("bookstore_minidom.xml", "w", encoding="utf-8") as f:f.write(doc.toprettyxml(indent="  "))

在这个示例中,我们使用 minidom 来创建 XML 文档。与 ElementTree 相比,minidom 提供了更多的控制,可以方便地格式化输出(如缩进和换行)。

三、在 Python 中解析 XML 文件

解析 XML 文件是指读取 XML 文件并提取所需数据。Python 提供了多种方法来解析 XML 文件,包括 xml.etree.ElementTreeminidom 以及 xml.sax 等模块。

1. 使用 xml.etree.ElementTree 解析 XML 文件

ElementTree 模块不仅可以创建 XML 文件,还可以用来解析 XML 文件。以下是一个简单的解析示例:

import xml.etree.ElementTree as ET# 解析 XML 文件
tree = ET.parse('bookstore.xml')
root = tree.getroot()# 遍历根元素的子元素
for book in root.findall('book'):title = book.find('title').textauthor = book.find('author').textprice = book.find('price').textprint(f"Title: {title}, Author: {author}, Price: {price}")

在这个示例中,我们使用 ElementTree.parse 方法解析 XML 文件,并通过 getroot 方法获取根元素。接着,我们使用 findall 方法遍历所有的 <book> 元素,并提取其中的 <title><author><price> 元素的文本内容。

2. 使用 minidom 解析 XML 文件

minidom 模块也可以用来解析 XML 文件。以下是一个示例:

from xml.dom.minidom import parse# 解析 XML 文件
doc = parse('bookstore_minidom.xml')# 获取所有的书籍元素
books = doc.getElementsByTagName("book")# 遍历每本书
for book in books:title = book.getElementsByTagName("title")[0].childNodes[0].dataauthor = book.getElementsByTagName("author")[0].childNodes[0].dataprice = book.getElementsByTagName("price")[0].childNodes[0].dataprint(f"Title: {title}, Author: {author}, Price: {price}")

在这个示例中,我们使用 minidom.parse 方法解析 XML 文件,并使用 getElementsByTagName 方法获取所有的 <book> 元素。然后,我们从每个 <book> 元素中提取出 <title><author><price> 元素的文本内容。

3. 使用 xml.sax 解析 XML 文件

xml.sax 是 Python 中处理 XML 的另一种方式,它是基于事件驱动的解析方式,适合处理大型 XML 文件。sax 的工作原理是通过事件(如开始元素、结束元素、字符数据等)来解析 XML。

以下是一个使用 xml.sax 解析 XML 文件的示例:

import xml.saxclass BookHandler(xml.sax.ContentHandler):def __init__(self):self.currentData = ""self.title = ""self.author = ""self.price = ""# 元素开始事件处理def startElement(self, tag, attributes):self.currentData = tag# 元素结束事件处理def endElement(self, tag):if self.currentData == "title":print(f"Title: {self.title}")elif self.currentData == "author":print(f"Author: {self.author}")elif self.currentData == "price":print(f"Price: {self.price}")self.currentData = ""# 内容事件处理def characters(self, content):if self.currentData == "title":self.title = contentelif self.currentData == "author":self.author = contentelif self.currentData == "price":self.price = content# 创建一个 XMLReader
parser = xml.sax.make_parser()# 关闭命名空间
parser.setFeature(xml.sax.handler.feature_namespaces, 0)# 重写 ContentHandler
Handler = BookHandler()
parser.setContentHandler(Handler)parser.parse("bookstore.xml")

在这个示例中,我们定义了一个 BookHandler 类,它继承自 xml.sax.ContentHandler。这个类中包含了三个主要的方法:startElementendElementcharacters,它们分别在元素开始、元素结束和处理元素内容时被调用。通过 xml.sax.make_parser 创建解析器并设置内容处理器后,可以使用 parser.parse 方法来解析 XML 文件。

在 Python 中处理 XML 文件有多种方法,包括 xml.etree.ElementTreeminidomxml.sax 等。这些方法各有优劣,ElementTreeminidom 更适合小型 XML 文档的创建和解析,而 xml.sax 则适合处理大型 XML 文档。通过这些工具,可以方便地创建、读取和操作 XML 文件,为数据的存储和交换提供了有力的支持。

在实际应用中,选择合适的工具取决于具体的需求和场景。例如,如果需要快速创建和解析 XML 文件,ElementTree 是一个很好的选择;如果需要处理大型 XML 文件,xml.sax 可能更为合适。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com