CSV转XML
把CSV表格包装成有效的XML:根标签和行标签名称自己定,列可以作为元素或属性,不合规的表头会修正成合法的标签名。
把文件拖到这里
.csv, .tsv, .txt · 最大300 MB
更多设置收起设置
如何转换为XML
- 1
拖入CSV文件
把.csv、.tsv或.txt文件拖到页面上。分隔符和字符编码直接根据文件的字节判断。
- 2
命名根标签和行标签
决定用什么包住整个文档、用什么包住每一行:默认是rows和row;如果目标系统读取的是catalog和product,就改成这两个。
- 3
转换并下载XML
点击按钮,保存一个格式良好的文档,带有XML声明和真正的缩进。
不能当作标签名的列标题
真实的导出文件里会有2024 sales、order id这样的表头,甚至有空单元格,这些都不是合法的XML名称。直接丢掉这样的列会丢失数据,所以工具按XML 1.0的要求修正名称:非法字符换成下划线,以数字开头的名称前面加n,空表头变成column_1。每一处重命名都会列出来。
元素还是属性,以及设置什么时候不生效
每一列都可以变成行的子元素,也可以变成行上的属性。属性生成的文档更紧凑,但XML解析器会把属性值里的换行规范化成空格。因此,包含多行文本的列无论怎么设置都写成元素,工具会告诉你是哪一列。
转义和编码不用你操心
数据里的&符号和尖括号会自动转义,属性里的引号也一样;XML完全禁止的控制字符会被去掉,并告诉你去掉了几个。无论源CSV用什么编码,结果始终是不带字节顺序标记的UTF-8,并带有注明这一点的XML声明。
不上传,不经过服务器,不留副本
解码CSV、修正名称、转义值和序列化文档,全部在这个浏览器标签页里完成,用的是随页面加载的JavaScript。文件不会发送到任何地方,所以即使在转换过程中,价目表或客户导出文件也一直留在你的设备上。
常见问题
标签名可以自己定吗?
可以,两个都能改。根元素默认是rows,每条记录默认是row,你可以把它们换成任何合法的名称,比如catalog和product,或者orders和order。XML不接受的名称,比如以数字开头的名称,会在一开始就被拒绝,并给出修正后的建议,而不会生成一个损坏的文件。
列应该作为元素还是属性?
元素是更稳妥的默认选择:它能容纳任何文本,包括换行,多数schema也期待元素。属性生成的文档短得多,适合简短的标识符,但值必须是单行。读取文件的系统期待哪种结构,就选哪种。
像2024 sales这样的表头会怎样?
默认会被修正成合法的标签:空格变成下划线,开头的数字前面加前缀,得到n2024_sales。所有重命名的列都会列出来,不会有任何改动瞒着你。如果你宁可停下来也不要自动修正,把无效名称的处理方式切换为“报错”。
我的CSV用分号分隔、Windows-1251编码,需要先转换吗?
不需要。除了逗号,分号、制表符、竖线和冒号都会测试;编码先根据字节顺序标记(BOM)识别,没有BOM时严格按UTF-8校验,失败后退回到Windows-1251或Windows-1252。如果识别结果和你的判断不一致,两者都可以手动设置。
空单元格会保留在结果里吗?
默认情况下,空单元格变成一个空的自闭合元素,这样每条记录的结构都一样,读取程序遍历起来更方便。把空值处理切换为“跳过”,这个元素就完全省略,文档更小,但各条记录的结构会不一样。
XML用什么编码保存?
始终是UTF-8,不带字节顺序标记,开头有一致的声明。XML解析器默认的就是这种组合,它也能避免声明的编码和实际字节不一致。如果要把片段嵌入更大的文档,可以关闭声明。
有两列都叫id,会怎样?
第二列变成id_2,第三列变成id_3,否则读取程序遍历一条记录的子元素时没办法区分它们。这些重命名和修正过的名称显示在同一个列表里。
转换时文件会上传吗?
不会。所有处理都在你的浏览器里本地完成,不涉及服务器;关闭标签页后,任何地方都不会保留表格的副本。