XML 转 CSV — 在浏览器中将 XML 数据转为 CSV 表格
在浏览器中将 XML 数据转换为 CSV 表格。处理嵌套元素、属性与重复行;分隔符可配置,全部在本地完成——无上传、无限制。
XML 和 CSV 处在数据格式复杂度谱系的两端,二者之间的转换本质上是一次取舍——保留什么、压平什么。XML 可以表达嵌套树、命名空间属性、混合内容,并通过 XSD 注解携带数据类型;CSV 不过是一张扁平的字符串网格——行与列,仅此而已。从 XML 到 CSV 的转换永远是一次简化:树形结构坍缩为表格,层级关系化作点号分隔的列名,丰富的类型系统塌陷成纯文本。这种简化正是目的所在:电子表格、数据库与分析工具都原生消费 CSV,从一条复杂的 XML API 响应走到一张透视表,中间必经 CSV。
XML 转 CSV 中「不那么显然」的一点,是行级元素的判定。多数 XML 文档都有一个恰好位于「正确层级」的重复元素——<items> 下的 <item>、<records> 下的 <record>、<rows> 下的 <row>——但部分文档会在多个层级上重复。<catalog> 里既有 <book>,每个 <book> 下又嵌套着 <author>,究竟把书还是把作者当作行,取决于你想要的是书籍清单还是作者清单。工具的自动检测默认选取嵌套最深的重复元素,对扁平的导出数据这通常是对的;当 XML 的结构与目标输出形状不匹配时,路径下拉框让你切换到另一个层级。
最终的交接:如果输出 CSV 需要切换分隔符(欧洲 Excel 用分号、剪贴板粘贴用制表符、老式 ETL 流水线用竖线),下载前到设置里改一下。如果这份 CSV 还要进一步转换——给 API 用 JSON、给配置文件用 YAML、给报表用 HTML 表格——本站的配套工具能直接接收 CSV 作为输入。如果目的地是关系型数据库,绝大多数数据库通过 COPY 或 LOAD DATA 命令就能直接消费 CSV,无需任何中间转换。
使用方法
粘贴或拖入你的 XML
把 XML 字符串或文件拖入输入框。解析器读取 XML 后,会把重复出现的元素识别为「行」。元素名变成列标题,嵌套的子元素被压平为点号分隔的列名。
选择作为行的重复元素路径
默认情况下,工具会自动选取嵌套最深的重复元素作为行模板。如果 XML 在多个层级都有候选(例如 `<orders><order>...</order></orders>`),可以从下拉框里挑出正确的路径。
复制或下载 CSV
默认分隔符是逗号。设置里可以切换成分号、制表符或竖线。输出的 CSV 是 UTF-8 编码并带 BOM,方便 Excel 直接导入。可以下载为 .csv 文件,也可以直接复制到剪贴板。
常见问题
XML 中什么算作「行」元素?
转换器会寻找重复出现的子元素——同名的兄弟节点,且至少出现两次。像 `<books><book>...</book><book>...</book></books>` 这样的结构里,`<book>` 就是行元素。如果多个层级都在重复,从路径下拉框里挑出你想要的层级即可。
CSV 输出如何处理 XML 属性?
行元素上的 XML 属性默认会成为带 `@` 前缀的列(例如 `<book id="123">...</book>` 对应 `@id`)。嵌套子元素上的属性会合并到该子元素的点号分隔路径里。在设置中可以关闭属性的提取。
深度嵌套的 XML 结构会怎样处理?
嵌套元素会被压平为点号分隔的列名。`<person><address><city>Berlin</city></address></person>` 变成一列名为 `address.city`、值为 `Berlin` 的字段。如果父元素重复,嵌套元素数组会展开为多行;否则会把多个值拼接到同一单元格中。
空缺或缺失的元素可以自定义占位吗?
可以。「缺失节点默认值」设置让你为空单元格填入占位文本。可以选择空字符串(默认)、`NULL`、`N/A`,或自定义占位符。当每行的嵌套结构不完全一致时,这个选项尤其有用。
限制说明
- 不解析 XML 命名空间XML 命名空间(`<ns:book xmlns:ns="...">`)会原样出现在列标题中。命名空间前缀不会被解析为完整 URI,因此列名可能比较冗长。
- 混合内容为近似处理同时包含文本和子元素的元素(即 XHTML 中常见的「混合内容」)会被提取其文本内容,并忽略内嵌的标签。原始结构无法保留。
- 不做 schema 校验或类型推断所有单元格值都按字符串处理。转换器不会推断数字类型、日期或布尔值。导入到电子表格后,请自行按需做类型转换。
平台说明
- macOS
- Numbers 与 Excel for Mac 都能干净地导入带 UTF-8 BOM 的 CSV。对于一次性 XML 转 CSV 的场景,浏览器工具比临时写一段 xmlstarlet 或 Python 脚本更省事。
- Linux
- 命令行等价是 `xmlstarlet sel -t -m '//row' ...` 加模板输出。对于从 API 响应或聊天消息里粘贴过来的临时 XML,浏览器工具更顺手。
- Web
- 完全在客户端运行。页面加载完后可以离线使用。解析过的 XML 不会离开浏览器——数据不会上传到任何服务器。