下面是Python实现提取XML内容并保存到Excel中的方法的完整实例教程。
1. 引言
XML是一种多用途的数据格式,常用于Web应用程序的数据交换以及应用程序与操作系统之间的交互。在Python中,我们可以使用标准库中的 xml
模块来解析XML文件内容。本教程将介绍如何使用Python提取XML文件内容并将其保存到Excel文件中。
2. 准备工作
在开始解析XML文件之前,需要先安装Python的 lxml
库,可以使用以下命令进行安装:
pip install lxml
此外,我们还需要安装处理Excel文件的 openpyxl
库,可以使用以下命令进行安装:
pip install openpyxl
在安装完成后,我们就可以开始解析XML文件并将其保存到Excel文件中。
3. 解析XML文件
接下来,我们将使用Python的 lxml
库来解析XML文件。以下是一个示例的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">Learning Python</title>
<author>Mark Lutz</author>
<year>2013</year>
<price>39.95</price>
</book>
<book category="web">
<title lang="en">Python Cookbook</title>
<author>David Beazley</author>
<year>2014</year>
<price>49.99</price>
</book>
</bookstore>
我们可以使用以下Python代码来解析该XML文件:
import lxml.etree as etree
with open('bookstore.xml', 'r') as f:
xml_content = f.read()
root = etree.fromstring(xml_content)
for book in root.xpath('//book'):
title = book.xpath('title/text()')[0]
author = book.xpath('author/text()')[0]
year = book.xpath('year/text()')[0]
price = book.xpath('price/text()')[0]
category = book.attrib['category']
print(title, author, year, price, category)
上述代码先使用 open
函数读取XML文件内容,然后使用 lxml
库中的 fromstring
函数将其解析为一个根节点。通过访问节点的 xpath
属性,我们可以提取出需要的内容并存入变量中。最后,我们将所需内容打印出来,以便确认是否正确提取出来。
4. 将XML内容保存到Excel文件中
接下来,我们将使用Python的 openpyxl
库将从XML文件中提取出的内容保存到Excel文件中。以下是示例代码:
import lxml.etree as etree
from openpyxl import Workbook
with open('bookstore.xml', 'r') as f:
xml_content = f.read()
root = etree.fromstring(xml_content)
wb = Workbook()
ws = wb.active
ws.append(['Title', 'Author', 'Year', 'Price', 'Category'])
for book in root.xpath('//book'):
title = book.xpath('title/text()')[0]
author = book.xpath('author/text()')[0]
year = book.xpath('year/text()')[0]
price = book.xpath('price/text()')[0]
category = book.attrib['category']
ws.append([title, author, year, price, category])
wb.save('bookstore.xlsx')
上述代码与上一节中的代码类似,我们首先使用 lxml
库解析XML文件,然后创建一个新的Excel文件并获取其活动工作表。 append
方法可以将一个列表作为一行写入Excel表格中。此外,我们还需要在写入之前先写入一行表头。
在这个示例中,我们将从XML文件中提取的内容以列排列,写入Excel文件。
5. 示例说明
下面我们将介绍两个实际的案例,说明如何使用Python解析XML文件并将其保存为Excel文件。
5.1 实例一
我们有一个名为 products.xml
的XML文件,该文件包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<name>iPhone X</name>
<price>999</price>
</product>
<product>
<name>iPad</name>
<price>499</price>
</product>
<product>
<name>iMac</name>
<price>1299</price>
</product>
</products>
我们需要将 name
和 price
的值保存到 products.xlsx
文件中。以下是代码示例:
import lxml.etree as etree
from openpyxl import Workbook
with open('products.xml', 'r') as f:
xml_content = f.read()
root = etree.fromstring(xml_content)
wb = Workbook()
ws = wb.active
ws.append(['Product Name', 'Price'])
for product in root.xpath('//product'):
name = product.xpath('name/text()')[0]
price = product.xpath('price/text()')[0]
ws.append([name, price])
wb.save('products.xlsx')
执行完代码后,我们得到了名为 products.xlsx
的Excel文件,其中包含从XML文件中提取的内容:
Product Name | Price |
---|---|
iPhone X | 999 |
iPad | 499 |
iMac | 1299 |
5.2 实例二
下面我们来处理一个XML文件,其中包含嵌套的元素。以下是一个名为 menu.xml
的XML文件,它包含有关菜单项的信息:
<?xml version="1.0" encoding="ISO-8859-1"?>
<menu>
<first>
<name>Appetizers</name>
<menuitem>
<name>Crab Cakes</name>
<price>8.95</price>
<description>Delicious crab cakes</description>
</menuitem>
<menuitem>
<name>Stuffed Mushrooms</name>
<price>6.95</price>
<description>Stuffed with crabmeat and cream cheese</description>
</menuitem>
<menuitem>
<name>Fried Shrimp</name>
<price>7.95</price>
<description>Fried shrimp served with cocktail sauce</description>
</menuitem>
</first>
<second>
<name>Entrees</name>
<menuitem>
<name>Filet Mignon</name>
<price>24.95</price>
<description>A juicy 8 oz. filet mignon</description>
</menuitem>
<menuitem>
<name>New York Strip</name>
<price>22.95</price>
<description>A tender 10 oz. New York strip steak</description>
</menuitem>
<menuitem>
<name>Stuffed Chicken</name>
<price>16.95</price>
<description>Chicken stuffed with crabmeat and shrimp</description>
</menuitem>
</second>
</menu>
我们需要将所有菜单项的名称、价格和描述写入名为 menu.xlsx
的Excel文件中。以下是示例代码:
import lxml.etree as etree
from openpyxl import Workbook
with open('menu.xml', 'r') as f:
xml_content = f.read()
root = etree.fromstring(xml_content)
wb = Workbook()
ws = wb.active
ws.append(['Name', 'Price', 'Description'])
for menu in root.xpath('//menuitem'):
name = menu.xpath('name/text()')[0]
price = menu.xpath('price/text()')[0]
description = menu.xpath('description/text()')[0]
ws.append([name, price, description])
wb.save('menu.xlsx')
运行完代码后,我们将获得一个名为 menu.xlsx
的Excel文件,其中包含从XML文件中提取的内容:
Name | Price | Description |
---|---|---|
Crab Cakes | 8.95 | Delicious crab cakes |
Stuffed Mushrooms | 6.95 | Stuffed with crabmeat and cream cheese |
Fried Shrimp | 7.95 | Fried shrimp served with cocktail sauce |
Filet Mignon | 24.95 | A juicy 8 oz. filet mignon |
New York Strip | 22.95 | A tender 10 oz. New York strip steak |
Stuffed Chicken | 16.95 | Chicken stuffed with crabmeat and shrimp |
6. 结论
我们在本教程中介绍了如何使用Python解析XML文件并将其保存到Excel文件中。我们使用了 lxml
库来解析XML文件,使用 openpyxl
库来将提取出的信息写入Excel文件中。我们还提供了两个示例,演示了如何解析不同类型的XML文件并将其写入Excel文件中。