在使用Python的pandas库处理XML数据并转换为CSV格式时,read_xml方法的stylesheet参数是自定义XML解析逻辑的重要配置项,它允许我们通过XSLT样式表定义XML节点的提取和转换规则,适配复杂的XML结构。

stylesheet参数的基本作用
read_xml方法默认会按照XML的层级结构自动解析节点,但当XML结构复杂、存在命名空间或者需要过滤特定节点时,默认解析逻辑可能无法满足需求。stylesheet参数支持传入XSLT样式表的路径或者样式表内容,pandas会先使用提供的XSLT样式表对原始XML进行转换,再解析转换后的结果生成DataFrame,最终导出为CSV文件。
XSLT样式表的基础编写规则
XSLT是可扩展样式表语言转换的缩写,用于将一个XML文档转换为另一个XML文档或者其他格式的文档。编写适配read_xml的XSLT样式表需要遵循以下基础结构:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<!-- 模板匹配规则 -->
<xsl:template match="/">
<root>
<xsl:apply-templates select="需要提取的节点路径"/>
</root>
</xsl:template>
<xsl:template match="匹配的节点">
<row>
<!-- 提取节点内的子元素作为列 -->
<column1><xsl:value-of select="子元素1名称"/></column1>
<column2><xsl:value-of select="子元素2名称"/></column2>
</row>
</xsl:template>
</xsl:stylesheet>
完整XML转CSV示例
1. 准备测试XML文件
我们首先创建一个包含用户信息的XML文件user_data.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<id>1</id>
<name>张三</name>
<age>25</age>
<city>北京</city>
</user>
<user>
<id>2</id>
<name>李四</name>
<age>30</age>
<city>上海</city>
</user>
<user>
<id>3</id>
<name>王五</name>
<age>28</age>
<city>广州</city>
</user>
</users>
2. 编写XSLT样式表
创建user_transform.xslt文件,定义提取user节点下所有子元素的规则:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:apply-templates select="users/user"/>
</root>
</xsl:template>
<xsl:template match="user">
<row>
<id><xsl:value-of select="id"/></id>
<name><xsl:value-of select="name"/></name>
<age><xsl:value-of select="age"/></age>
<city><xsl:value-of select="city"/></city>
</row>
</xsl:template>
</xsl:stylesheet>
3. 使用read_xml的stylesheet参数转换并导出CSV
编写Python代码,通过stylesheet参数指定XSLT样式表路径,完成XML到CSV的转换:
import pandas as pd
# 读取XML文件,指定stylesheet参数路径
df = pd.read_xml(
"user_data.xml",
stylesheet="user_transform.xslt"
)
# 导出为CSV文件
df.to_csv("user_data.csv", index=False, encoding="utf-8-sig")
print("转换完成,CSV文件已生成")
4. 转换结果说明
生成的user_data.csv内容如下:
| id | name | age | city |
|---|---|---|---|
| 1 | 张三 | 25 | 北京 |
| 2 | 李四 | 30 | 上海 |
| 3 | 王五 | 28 | 广州 |
注意事项
- stylesheet参数支持传入本地XSLT文件路径,也支持直接传入XSLT样式表的字符串内容,传入字符串时需要确保内容符合XSLT语法规范。
- 如果XML文件包含命名空间,需要在XSLT样式表中声明对应的命名空间,否则无法正确匹配节点。
- 转换后的XML结构需要保证每个
row节点下的子元素名称对应DataFrame的列名,子元素内容对应列的值。 - 如果XSLT样式表编写错误,read_xml方法会抛出解析异常,需要检查样式表的节点匹配规则是否正确。
pandasread_xmlstylesheetXML_to_CSV修改时间:2026-06-28 00:18:31