Python实现提取XML内容并保存到Excel中的方法

  • Post category:Python

下面是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>

我们需要将 nameprice 的值保存到 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文件中。