XML 转换

在线处理 XML:格式化缩进与压缩、well-formed 校验并定位出错行列、XML转JSON、提取全部属性与 CDATA 内容,用自写解析器逐字符扫描而不依赖浏览器 DOM,文件不上传服务器。

拖放 XML 文件到这里

支持 .xml .xsd .xsl .svg .rss .atom .plist 等 XML 文本(最大 20MB)· 也可以直接粘贴内容 · 文件不上传服务器

编码

格式化选项

元素与文字交错的混合内容整块保持在同一行,不插入换行,避免改动文本语义。

校验范围

标签闭合与嵌套顺序、属性引号是否成对、属性是否重复、是否只有一个根元素、注释与 CDATA 是否正确闭合、实体引用是否合法、文本里有没有裸露的 < 与 &。

不联网获取外部 DTD 与外部实体,不做 DTD / Schema 有效性校验,不做 XSLT 转换。

使用方法

  1. 1 把 XML 文本粘贴到输入框,或拖入 .xml、.xsd、.svg、.rss 等文本文件。内容只在浏览器里处理,不会上传。
  2. 2 点「格式化」按所选缩进展开,或点「压缩」去掉标签之间的空白;文件不合法时会提示出错行列与原因。
  3. 3 需要给程序用时点「转 JSON」,需要清点属性或取出 CDATA 内容时用对应的提取按钮。
  4. 4 点「下载结果」保存文件,或「复制结果」直接粘贴回编辑器。

支持范围与限制

项目 说明
处理方式 全程在浏览器本地完成,文件不上传服务器,不占用每日转换次数,也不需要登录
解析方式 自写事件式解析器逐字符扫描,不用 DOMParser,因此几 MB 的文件也不会让页面长时间失去响应
格式化 按嵌套层级缩进(2 空格、4 空格或 Tab);元素与文字交错的混合内容整块保持在同一行,避免改动语义
压缩 去掉标签之间的空白与换行,文本节点内部的空格不动
校验范围 检查标签闭合与嵌套顺序、属性引号是否成对、是否只有一个根元素、注释与 CDATA 是否正确闭合、实体引用是否合法,并给出行号与列号
XML转JSON 属性以 @ 前缀、文本以 #text 表示,同名兄弟节点自动转为数组,CDATA 按文本处理;命名空间前缀按字面名输出,不解析其含义
属性提取 列出「元素路径 → 属性名 = 值」,可导出为 CSV 或 JSON
CDATA提取 按出现顺序导出所有 CDATA 段的文本内容
不支持 不联网获取外部 DTD 与外部实体,不做 DTD/Schema 有效性校验(只判断格式是否合法),不做 XSLT 转换
文件大小 建议 20MB 以内;内容超过 5000 行或 200KB 时输入输出框只显示前 500 行预览,处理与下载按完整内容执行

文件安全说明

处理方式 全程在你的浏览器里完成,页面不会把文件提交到服务器
服务器副本 不产生,也没有上传文件或结果文件需要清理
每日次数 不占用免费转换次数,也不需要登录
网络请求 页面加载完成后不再有与文件相关的网络请求,断网也能继续处理本地文件

文件大小上限与支持的格式见上方「支持范围与限制」。

常见问题

文件会上传到服务器吗?

不会。解析、格式化与下载全部在浏览器里完成,没有与文件相关的网络请求,服务器不留副本,也不占用每日免费次数、不需要登录。

为什么不用浏览器自带的 XML 解析器?

DOMParser 会把整个文档建成 DOM 树,几 MB 的文件就可能让页面卡住十几秒,而且它给出的错误信息只有一句话、没有行列号。这里用自写的逐字符解析器,边扫描边记录行列,出错时能直接指出位置,大文件也只占用少量内存。

XML转JSON 后属性为什么多了个 @?

XML 的属性和子元素是两种东西,转成 JSON 后都需要占一个键,因此约定属性加 @ 前缀、元素的文本内容用 #text。同名兄弟节点会合并成数组,避免后一个覆盖前一个。这是常见约定,程序里按这个规则取即可。

格式化会不会改变文件含义?

只改动标签之间的空白。元素与文字混排的内容(例如 <p>你好<b>世界</b></p>)整块保持在同一行,不会插入换行,因为在那种情况下空白属于文本内容,改动会影响显示。

提示「根元素之外还有内容」是什么意思?

合法的 XML 只能有一个根元素,根元素结束后除了注释与处理指令不能再有别的标签。常见原因是把两段 XML 拼在了一个文件里,或者缺少最外层的包裹标签。

能做 Schema 或 DTD 校验吗?

不能。本工具只判断文件是否 well-formed(格式合法),不联网下载 DTD 与 Schema,也不校验元素出现次数、数据类型这类有效性规则。

能处理 SVG、RSS、pom.xml 这类文件吗?

可以,它们本质都是 XML 文本,格式化、压缩、校验与转 JSON 都适用。SVG 需要转成 CAD 图纸请用「SVG转DXF」。

CDATA 里的内容为什么提取出来是纯文本?

CDATA 段的作用就是告诉解析器「这里面不要当标记处理」,因此提取时只取其中的文本,<![CDATA[ 与 ]]> 这两个边界标记会被去掉。

相关工具