XML 以其卓越的灵活性和独特的自描述特性,在数据存储与交换的领域中得到广泛的应用。不过,大量用户在直接操作 XML 文件时,往往会遭遇诸多难题。而 Excel 是一款熟悉且用户友好的数据分析工具,通过将 XML 转换为 Excel 不仅能让数据更易于访问,还能提高数据在各种应用程序中的可用性。本文将介绍如何使用 Spire.XLS for Python 在 Python 中将 XML 转换为 Excel 或将 XML 转换为 PDF。
安装 Spire.XLS for Python
此教程需要 Spire.XLS for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows中。
pip install Spire.XLS
如果您不确定如何安装,请参考: 如何在 Windows中安装 Spire.XLS for Python
了解 XML 结构:元素、属性和数据
在将 XML 转换为 Excel 之前,了解 XML 文件的结构至关重要。XML 是一种标记语言,使用标记来定义元素、属性和数据。下面是这些组成部分的细分:
- 元素:它们是 XML 文档的基本构建块。它由开始标签、结束标签以及标签之间的内容组成。
<person>
<name>张三</name>
<age>30</age>
</person>
- 属性:属性为元素提供额外的信息。它出现在元素的开始标签内,以名称 - 值对的形式呈现。
<person id="1">
<name>张三</name>
<age>30</age>
</person>
- 数据:这是包含在元素开始和结束标记中的内容。
了解这些组成部分将帮助您有效地将 XML 数据映射到 Excel 中。
Python 将 XML 转换为 Excel
要将 XML 文件加载到 Python 中,可以使用 Python 标准库中的 xml.etree.ElementTree 库。该库提供了导航和操作 XML 树的方法。下面是一个示例:
import xml.etree.ElementTree as ET
# 加载 XML 文件
tree = ET.parse('data.xml')
root = tree.getroot()
# 遍历元素
for person in root.findall('person'):
name = person.find('name').text
age = person.find('age').text
解析 XML 数据后,下一步就是将其映射到 Excel 工作表中。您可以利用 Spire.XLS for Python 创建一个新的工作簿,将数据输入特定的单元格,并对工作表应用样式和格式。这些格式选项包括自动调整列宽、调整文本对齐方式以及将标题加粗。
要在 Python 中将 XML 转换为 Excel,请按照以下步骤操作:
- 使用 xml.etree.ElementTree 库从 XML 文件中获取数据。
- 创建工作簿 Workbook 对象。
- 使用 Workbook.Worksheets.Add() 方法添加工作表。
- 使用 Workheet.SetValue() 方法将从 XML 文件中提取的数据写入工作表的单元格中。
- 应用样式和格式来增强工作表的外观。
- 将工作簿保存为 Excel 文件。
以下代码提供了一种更智能的方法,可从 XML 中读取数据并将其导入 Excel 文件。
- C#
from spire.xls import *
from spire.xls.common import *
import xml.etree.ElementTree as ET
# 创建 Workbook 对象
workbook = Workbook()
# 移除默认工作表
workbook.Worksheets.Clear()
# 添加新工作表并命名
worksheet = workbook.Worksheets.Add("报销表")
# 加载XML数据
xml_tree = ET.parse("消费.xml")
xml_root = xml_tree.getroot()
# 获取第一个 “ExpenseItem” 元素
first_item = xml_root.find("ExpenseItem")
# 提取标题信息并将其转换为列表
header = list(first_item.iter())[1:]
# 定义英文和中文标签的映射关系
label_mapping = {
"Date": "日期",
"Description": "用途",
"Amount": "金额",
}
# 将标题写入Excel
for col_index, header_node in enumerate(header, start=1):
header_text = header_node.tag
chinese_label = label_mapping.get(header_text, header_text)
worksheet.SetValue(1, col_index, chinese_label)
# 遍历每个 “ExpenseItem” 元素和其中的每个数据节点,将其他数据写入Excel
row_index = 2
for item in xml_root.iter("ExpenseItem"):
for col_index, data_node in enumerate(list(item.iter())[1:], start=1):
value = data_node.text
header_text = list(header[col_index - 1].iter())[0].tag
chinese_label = label_mapping.get(header_text, header_text)
worksheet.SetValue(row_index, col_index, value)
row_index += 1
# 设置列宽
worksheet.AllocatedRange.AutoFitColumns()
# 设置对齐方式
worksheet.AllocatedRange.HorizontalAlignment = HorizontalAlignType.Left
# 设置字体样式
worksheet.Range["A1:C1"].Style.Font.IsBold = True
# 保存结果文件
workbook.SaveToFile("Xml转Excel.xlsx")
workbook.Dispose()
Python 将 XML 转换为 PDF
上一个示例成功地将 XML 文件中的数据导入到 Excel 工作表中,然后您可以使用 Worksheet.SaveToPdf() 方法将此工作表转换为 PDF文档。为创建结构合理的 PDF,可考虑在转换过程中调整页面布局设置,如保留页边距和网格线等。
使用 Python 将 XML 转换为 PDF 的步骤如下:
- 使用 xml.etree.ElementTree 库从 XML 文件中获取数据。
- 创建工作簿 Workbook 对象。
- 使用 Workbook.Worksheets.Add() 方法添加工作表。
- 使用 Workheet.SetValue() 方法将从 XML 文件中提取的数据写入工作表的单元格中。
- 应用样式和格式来增强工作表的外观。
- 获取 PageSetup 对象,然后使用其下的各属性配置页面设置。
- 使用 Worksheet.SaveToPdf() 方法将工作表保存为 PDF 文件。
- C#
from spire.xls import *
from spire.xls.common import *
import xml.etree.ElementTree as ET
# 创建 Workbook 对象
workbook = Workbook()
# 移除默认工作表
workbook.Worksheets.Clear()
# 添加新工作表并命名
worksheet = workbook.Worksheets.Add("报销表")
# 加载XML数据
xml_tree = ET.parse("消费.xml")
xml_root = xml_tree.getroot()
# 获取第一个 “ExpenseItem” 元素
first_item = xml_root.find("ExpenseItem")
# 提取标题信息并将其转换为列表
header = list(first_item.iter())[1:]
# 定义英文和中文标签的映射关系
label_mapping = {
"Date": "日期",
"Description": "用途",
"Amount": "金额",
}
# 将标题写入Excel
for col_index, header_node in enumerate(header, start=1):
header_text = header_node.tag
chinese_label = label_mapping.get(header_text, header_text)
worksheet.SetValue(1, col_index, chinese_label)
# 遍历每个 “ExpenseItem” 元素和其中的每个数据节点,将其他数据写入Excel
row_index = 2
for item in xml_root.iter("ExpenseItem"):
for col_index, data_node in enumerate(list(item.iter())[1:], start=1):
value = data_node.text
header_text = list(header[col_index - 1].iter())[0].tag
chinese_label = label_mapping.get(header_text, header_text)
worksheet.SetValue(row_index, col_index, value)
row_index += 1
# 设置列宽
worksheet.AllocatedRange.AutoFitColumns()
# 设置对齐方式
worksheet.AllocatedRange.HorizontalAlignment = HorizontalAlignType.Left
# 设置字体样式
worksheet.Range["A1:C1"].Style.Font.IsBold = True
# 将工作表转换到一页纸上
workbook.ConverterSetting.SheetFitToPage = True
# 获取 PageSetup 对象
pageSetup = worksheet.PageSetup
# 设置页边距
pageSetup.TopMargin = 0.5
pageSetup.BottomMargin = 0.5
pageSetup.LeftMargin = 0.5
pageSetup.RightMargin = 0.5
# 保留网格线
pageSetup.IsPrintGridlines = True
# 将工作表保存为 PDF 文件
worksheet.SaveToPdf("Xml转Pdf.pdf")
workbook.Dispose()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。