跳到主要内容
PulsarKit

XML转Excel

把XML订阅源或系统导出文件变成电子表格。重复出现的记录元素由工具自动找出,属性各自成为单独的列。

把文件拖到这里

.xml, .rss, .xhtml, .txt · 最大300 MB

更多设置

如何转换为Excel

  1. 1

    拖入XML文件

    订阅源、商品目录和系统导出文件都在本地读取。支持RSS、普通XML和XHTML。

  2. 2

    确认识别出的记录元素

    重复次数最多的路径成为行。如果你的文件把记录放在不寻常的位置,可以手动改。

  3. 3

    转换并下载XLSX

    每条记录一行,表头冻结,可以直接筛选和排序。

找出什么算一行

XML没有表格的概念,所以第一个真正的问题是:哪个元素是记录。工具遍历文档树,对每个节点统计同名子元素的数量;重复次数最多的路径胜出,数量相同时更深的路径优先,因为越深越具体:rss.channel.item比rss.channel更有用。在订阅源和商品目录上,这个经验规则几乎每次都对,但它终究只是经验规则,所以路径是一个可以编辑的字段,而不是藏起来的决定。比如1C导出文件里Document和TableRow都会重复,这时只有你知道自己要的是哪一个。

属性、命名空间和嵌套

属性和元素一样承载数据,所以id="7"会变成名为@id的列,嵌套元素上的currency="EUR"会变成sum.@currency。前缀可以改,也可以完全不要属性。默认去掉命名空间前缀,dc:title会落在名为title的列里,打开表格时几乎所有人都想要这样;关掉这个选项,就保留带前缀的名称。嵌套元素在你允许的深度内展开成用点号连接名称的列,更深的内容存成紧凑的JSON,表格不会横向膨胀。

实体声明一律拒绝,不会展开

XML文件可以在DOCTYPE里声明自己的实体;展开这些实体,正是“十亿笑声”(billion laughs)攻击耗尽内存、XXE从服务器上读取文件的方式。不可信的实体没有安全的展开办法,转换成电子表格也没有理由去展开,所以含有ENTITY声明的文档会在解析开始前被拒绝,提示里会写清原因。删掉DOCTYPE,文件其余部分就能正常转换。

在这里解析,不在服务器上

解码、校验和转换都在当前浏览器标签页里完成,用的是专门为此编写的解析器。文件不上传;外部实体也一律不展开,所以文件的任何部分都无法向外发出请求。

常见问题

重复的元素是怎么选出来的?

工具在整个文档里统计同名的兄弟元素,选出数量最多的路径;两条路径数量相同时,优先更深的那条。选中的路径会显示出来,你可以换成自己输入的任何路径。

属性会放到哪里?

放在单独的列里,默认带@前缀:记录上的属性是@id,嵌套元素上的属性是sum.@currency。前缀可以改,也可以完全跳过属性。

嵌套的元素会怎么处理?

它们会变成order.customer.city这样用点号连接名称的列,直到你设置的深度上限。更深的内容写成紧凑的JSON字符串放进一个单元格,不再展开成更多的列。

命名空间怎么处理?

默认去掉dc:这样的前缀,所以dc:title会变成名为title的列。如果你的文件里两个命名空间确实用了同一个本地名称,关掉去前缀,把它们分开。

支持RSS吗?

支持,而且这是识别效果最好的情况:工具自动找到rss.channel.item,订阅源里每个条目一行,title、link和pubDate各成一列。

最多能有多少行?

1,048,576行,这是XLSX格式本身的上限。更大的订阅源会被拒绝,并附上CSV转换器的链接,CSV没有这个上限。

我的文件会上传吗?

不会。文件在你的浏览器里解码、解析和转换;声明的实体直接拒绝,不会展开,所以文档里的任何内容也无法触发网络请求。

相关工具