Python3读取XML文件内容

介绍

XML(eXtensible Markup Language)是一种标记语言,用于存储和传输数据。在Python中,我们可以使用内置的xml模块来读取和处理XML文件。

本文将介绍如何使用Python3读取XML文件的内容,并给出相应的代码示例。我们将从解析XML文件的基本知识开始,然后深入了解如何使用Python读取和处理XML文件中的数据。

解析XML文件

在开始之前,我们先了解一下XML文件的结构。XML文件由标签(tag)和数据内容组成,标签之间可以嵌套。标签用尖括号< >包围,数据内容位于标签之间。

以下是一个简单的XML文件示例:

<bookstore>
  <book category="cooking">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="children">
    <title lang="en">Harry Potter</title>
    <author>J.K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore>

要解析XML文件,我们需要使用xml.dom模块中的minidom类。首先,我们需要导入该类:

from xml.dom import minidom

然后,我们可以使用minidom.parse()方法解析XML文件:

dom = minidom.parse('books.xml')

这将创建一个表示整个XML文件的文档对象模型(DOM)。接下来,我们可以通过DOM对象获取XML文件的根元素:

root = dom.documentElement

获取标签内容

要获取XML文件中特定标签的内容,我们可以使用DOM对象的getElementsByTagName()方法。例如,要获取所有book标签的内容,可以使用以下代码:

books = root.getElementsByTagName('book')

这将返回一个包含所有book标签的列表。我们可以遍历这个列表,并获取每个标签的内容:

for book in books:
    title = book.getElementsByTagName('title')[0]
    author = book.getElementsByTagName('author')[0]
    year = book.getElementsByTagName('year')[0]
    price = book.getElementsByTagName('price')[0]
    
    print('Title: %s' % title.childNodes[0].data)
    print('Author: %s' % author.childNodes[0].data)
    print('Year: %s' % year.childNodes[0].data)
    print('Price: %s' % price.childNodes[0].data)
    print('-----------')

上述代码将打印每本书的标题、作者、年份和价格。

获取标签属性

在上面的示例中,我们只获取了标签的内容。但是,有时我们也需要获取标签的属性值。例如,在上面的XML文件中,book标签具有一个名为category的属性。

要获取标签的属性值,我们可以使用标签对象的getAttribute()方法。以下是获取book标签的category属性值的示例代码:

for book in books:
    category = book.getAttribute('category')
    print('Category: %s' % category)

修改XML文件

除了读取XML文件的内容,我们还可以使用Python来修改XML文件。要修改XML文件,我们可以使用DOM对象的一系列方法。

以下是一个简单的示例,演示了如何将所有书的价格增加10%:

for book in books:
    price = float(book.getElementsByTagName('price')[0].childNodes[0].data)
    price_increase = price * 0.1
    new_price = price + price_increase
    
    book.getElementsByTagName('price')[0].childNodes[0].data = str(new_price)

上述代码将读取每本书的价格,然后计算出新的价格,并将新的价格写回XML文件中。

mermaid状态图

下面是一个使用mermaid语法绘制的状态图,展示了XML文件的读取过程:

stateDiagram
    [*] --> Read_XML_File
    Read_XML_File --> Get_Root_Element
    Get_Root_Element --> Get_Books
    Get_Books --> Get_Book_Elements
    Get_Book_Elements --> Get_Title
    Get_Book_Elements --> Get_Author
    Get_Book_Elements --> Get_Year
    Get_