XML转CSV
把订阅源、商品导出文件或RSS文件变成表格。重复出现的记录元素由工具自动找出,不需要写XPath。
把文件拖到这里
.xml, .rss, .xhtml, .txt · 最大300 MB
更多设置收起设置
如何转换为CSV
- 1
拖入XML文件
把.xml或.rss文件拖到页面上。文件会先经过校验,少了闭合标签时会报告行号和列号,而不是给出半张表。
- 2
确认记录元素
工具会找出重复的元素,并显示它包含多少条记录,比如rss.channel.item有四十条。如果这不是你想要的层级,就选另一个候选项。
- 3
转换并下载CSV
点击按钮,保存表格。
XML没有行,所以要把行找出来
一棵树不会告诉你哪一层是记录。工具把文档遍历到第六层,统计每条路径下有多少个同名的兄弟元素,数量最多的一组胜出;数量相同时更深的路径优先,因为rss.channel.item比rss.channel更有用。最多给出五个候选项,并标出各自的记录数。
属性、嵌套和重复的子元素
每个属性单独成为一列,列名带@前缀,所以商品上的id不会和同名的子元素冲突。子元素在你允许的深度内变成用点号连接名称的列,更深的内容以JSON形式写进一个单元格。重复的子元素可以合并、编号,或者保留为JSON。
命名空间和恶意文档
默认去掉命名空间前缀,所以dc:title会变成普通的title列,混用三套词汇的订阅源也能得到好读的表头。在DOCTYPE里声明自定义实体的文档会在解析前被拒绝,不会展开;能让浏览器标签页卡死的正是这类文件。
转换不需要上传
校验器、解析器和CSV写入器都是在当前浏览器标签页里运行的JavaScript。文档的任何部分都不会发送到服务器,不会保存,也不会记入日志;断开网络,工具照样能用。关闭标签页后,文件什么也不会留下。
常见问题
工具怎么判断哪个元素是记录?
靠统计重复次数。工具检查深度六以内的每条路径,看有多少个同名的兄弟元素,数量最多的路径就是记录;两条路径数量相同时,更深的那条胜出。其他候选项连同数量一直显示在界面上;文档结构特殊时,也可以自己输入路径。
XML属性会放到哪里?
每个属性成为一列,列名带@前缀,所以id属性是@id,和名为id的子元素区分开。如果导出文件里有不需要的属性,把属性设置切换为跳过,就会全部去掉,表格也更窄。
记录里嵌套的元素会怎么处理?
它们会变成price.currency这样用点号连接名称的列,直到你设置的深度上限。超出上限的整棵子树以JSON形式写进一个单元格,数据还在,也不会生成成千上万个几乎为空的列。
为什么CSV开头有字节顺序标记(BOM)?
这样双击打开时Excel能认出文件是UTF-8,而不是猜成某个旧代码页,把带重音的字母或西里尔文弄成乱码。如果文件要交给不认这个标记的脚本或数据库导入程序,改一个设置就能输出不带BOM的UTF-8。
Excel把所有内容显示在一列里,哪里出错了?
文件本身没有问题。Excel按系统区域设置里的分隔符拆分,欧洲很多地区用的是分号。选择分号重新转换一次,或者对已有的文件使用“数据”里的“分列”功能。
RSS或Atom订阅源能转换吗?
能,这是最简单的情况。识别会自动落在rss.channel.item或对应的entry元素上,每个条目成为一行;去掉前缀后,Dublin Core或媒体标签这类带命名空间的扩展也会作为普通的列出现。
为什么以等号开头的值前面多了一个引号?
因为不这样做,电子表格会把它当成公式;来自不可信订阅源的值可以被特意构造成打开文件时执行命令。开头加一个撇号就能让它失效。-5这样的普通负数不受影响。
我的文件有DOCTYPE,被拒绝了,为什么?
声明了实体的DOCTYPE是有意拒绝的。嵌套的实体定义能展开成几GB的文本,让标签页卡死;外部实体还能去读取别处的文件。删掉DOCTYPE里的实体声明,文档就能正常转换。