XML → CSV 转换器,免费
通过自动检测将 XML 数据转换为 CSV 格式。
使用方法
- 在左侧区域粘贴或输入您的 XML 数据。
- 工具会自动检测重复元素并扁平化嵌套结构。
- 在右侧预览您的数据。点击下载 CSV 保存转换后的文件。
常见问题
嵌套元素是如何处理的?
嵌套元素会使用点号标记扁平化。例如,「person.address.city」会成为单独的列标题。
如果元素拥有不同数量的子元素会怎样?
缺失值在 CSV 输出中留空。即使某些行缺少某些值,所有列标题也会保留。
工具如何检测重复元素?
工具会自动识别 XML 中最常见的元素类型,并将其用作行来源。
XML转CSV转换为何如此常见
XML冗长且层次化;CSV扁平且密集。现实中大量有用数据存储于XML格式中:sitemap.xml、RSS / Atom订阅源、WordPress导出文件、Apple plist配置、Maven pom.xml 依赖列表、GPS轨迹(GPX)、Google Earth地标(KML)、银行对账单格式(CAMT.053、MT940的XML形式)、电商产品供稿、医疗HL7 v3、XBRL财务报告、MusicXML乐谱,几乎所有这些数据都需要先展平为行才能分析。Excel、Google Sheets、SQL LOAD DATA、Pandas、R、Tableau、Power BI均可原生读取CSV;将XML导入这些工具意味着首先需要转换。
根本性的不匹配
XML允许任意嵌套;CSV是二维的。不存在通用的无损XML→CSV映射。任何转换器都必须对树的哪一层代表「行」以及如何处理更深的嵌套做出假设。两种常见形态:
- 重复记录格式(简单情况)。根元素包含多个具有相同形状的子元素:
<catalog><book>…</book><book>…</book></catalog>。每个<book>成为一行;其叶元素成为列。这是转换器寻找并能干净处理的格式。 - 混合内容文档格式。带有嵌入标记的流动文本,如XHTML或DocBook。对此没有干净的CSV映射,通常序列化为单个字符串单元格或被拒绝。
该工具通过查找根元素最频繁的直接子元素来自动检测重复元素,这对约90%的真实XML供稿是正确的。如果您的XML不符合该模式,请先用快速的XPath脚本对其进行预处理或手动编辑为重复记录形态。
常见的转换效果好的XML供稿
- sitemap.xml:每个
<url>条目成为一行,包含loc、lastmod、changefreq、priority列。适用于SEO审计和内容清单。 - RSS / Atom订阅源:每个
<item>或<entry>成为一行。适用于内容营销分析或迁移到其他平台。 - WordPress导出XML(WXR):文章、页面、附件的
<item>标签。常用于迁移到Substack、Ghost或静态站点生成器时。 - GPX(GPS Exchange Format),
<trkpt>轨迹点包含lat、lon、ele、time列。适用于路线分析。 - KML(Google Earth),包含名称、描述、坐标的
<Placemark>条目。 - iTunes / Apple plist XML:重复记录形式,播放列表条目、应用元数据。
- OFX / QFX / CAMT银行对账单XML:交易成为行,用于会计导入。
- 产品目录供稿:许多电商平台发布含有
<product>重复元素的XML供稿,用于比较购物引擎(CSE)提交。
属性、嵌套和重复子元素的处理方式
- 属性(如
<book id="42">)被展平为列。转换器在无歧义时直接使用属性名作为列标题(id)。 - 嵌套元素使用点符号展平:
<person><address><street>Main</street><city>NYC</city></address></person>生成address.street和address.city列。这与Pandas的json_normalize对嵌套JSON使用的惯例相同。 - 重复子元素(如
<tags><tag>a</tag><tag>b</tag></tags>)可能是个问题:没有明显的扁平表示方式。如需每列一个标签或每行一个标签的输出,请预先处理。 - 五个预定义实体引用(
&、<、>、'、")在转换过程中被反转义,因此XML中的Tom & Jerry在CSV单元格中变为Tom & Jerry。 - CDATA节被解包,内容原样成为单元格值。
- 注释和处理指令被丢弃;CSV没有等效概念。
编码:Excel陷阱
XML通过 <?xml version="1.0" encoding="UTF-8"?> 声明其编码。CSV没有编码声明;读取方需要猜测。Windows上的Excel默认使用Windows-1252,因此在没有字节顺序标记的情况下打开UTF-8 CSV会显示乱码(é变为é,ü变为ü)。解决方案:要么在文件开头添加UTF-8 BOM(),使用Excel的「数据 → 从文本/CSV」导入向导并明确选择UTF-8,要么在Google Sheets中打开文件(无需BOM即可正确处理UTF-8)。
分隔符选择
根据RFC 4180,标准CSV分隔符是逗号。本工具还支持分号、制表符和管道符,请选择适合您受众的那个:
- 逗号:默认值。当操作系统地区设置为英语时,Excel可识别它。适用于大多数场景。
- 分号:在欧洲大陆和拉丁美洲更受偏好,因为那里使用逗号作为小数分隔符。Excel使用操作系统的列表分隔符,因此法语或德语地区设置的Excel会生成以分号分隔的CSV。
- 制表符:当字段包含逗号时很有用(地址、自由文本)。在科学数据中很常见。
- 管道符:回退到任何自然数据中都很罕见的分隔符。用于某些旧式企业系统,其中数据可能同时包含逗号、分号和制表符。
根据RFC 4180,包含所选分隔符、换行符或双引号的字段会自动用双引号括起;嵌入的双引号通过重复来转义。无论您选择哪种分隔符,相同的引用规则都适用。
隐私
XML载荷通常包含机密信息:银行对账单交易、内部员工数据、揭露内部URL的爬取站点地图、医疗记录、保密协议保护的产品目录。浏览器内置的 DOMParser 完全在您的标签页中运行,没有网络请求,没有服务器往返,没有日志记录。数据从剪贴板进入内存中的解析树,经过一次展平遍历,结果呈现在输出文本框中。如果您不点击「下载」,甚至不会写入磁盘。
常见错误
- 粘贴非重复记录形态的XML。单个配置文件等没有重复内容的文档无法展平为可用的CSV。转换器专为「类似项目列表」的XML设计。
- 期望属性前缀能完整保留。
<product id="42">成为名为id的列,而非product@id或product.id。如果您在其他地方将CSV重新导入为XML,您需要重新映射。 - 为受众选择了错误的分隔符。在法语Excel安装中打开逗号CSV可能折叠为单列。请将分隔符与文件最终使用的目标匹配。
- 忘记为Excel添加UTF-8 BOM。在Windows Excel中,没有BOM时非拉丁字符会显示乱码。要么添加BOM,要么改用Google Sheets / 网页版Excel打开文件。
- 尝试转换XHTML或DocBook。混合内容文档XML不能干净地展平,对于这些格式请使用适当的XML/XSLT管道,而非表格转换器。
- 字段值中预存的CSV注入风险。如果您的XML包含用户生成的文本,并且您将在Excel或Sheets中打开输出,以
=、+、-或@开头的单元格会被解释为公式。OWASP将其记录为真实的攻击类型,在分享用户生成内容的导出前请进行清理。 - 重复子元素。如果XML有
<tags>包装器包含多个<tag>子元素,扁平输出无法干净地表示这一点。要么展平为每个标签一行(重复父字段),要么预处理XML将标签内联为分隔字符串。
更多常见问题
该工具会根据模式验证我的XML吗?
不会。它仅使用浏览器内置的 DOMParser 检查格式是否良好。如需XSD或RELAX NG验证,请使用专用工具,如 xmllint、Saxon或W3C XML模式验证器,格式良好性对于安全展平为CSV已足够。
我的XML可以有多大?
只要浏览器能承载,没有上限。由于没有服务器参与,没有服务器端限制。在现代设备上,数十兆字节的XML一两秒内即可转换。如果您有数百兆字节的XML,请在转换前分批拆分;通过单个浏览器标签页运行全部内容可能会遇到内存限制。
该工具是否处理XML命名空间?
是的,像 <atom:link> 这样的命名空间元素会被识别,前缀保留在列名中。如果您不希望CSV标题中有前缀,请对输出进行快速搜索和替换以删除它们。
我的XML会被上传到任何地方吗?
不会。所有解析和展平操作均通过内置的 DOMParser 在浏览器中进行。文本框内容不会被传输、记录或存储。标签页关闭后,数据即消失。
这与JSON转CSV工具有何区别?
目标相同(将层次数据展平为行),但输入格式不同。XML更冗长,允许属性,有命名空间,并为特殊字符使用实体引用。XML转CSV转换器专门处理这些特性;JSON转CSV转换器期望对象数组输入。如果您有JSON,请使用那个工具;如果您有XML,这个工具会给您更干净的结果。
我可以进行反向转换(CSV转XML)吗?
本工具不支持,但反向转换通常更简单:选择一个行元素名称,包装每一行,并将每列转换为子元素。使用 csv + xml.etree 的小型Python或Node脚本可以在20行内完成此操作。或使用Excel的Power Query等结构化数据工具,它可以按所选模式将CSV导出回XML。