支持 XML 属性、同名元素、注释、<![CDATA[]]> 与自闭合标签;标签未闭合会直接报错。
所有处理都在你的浏览器本地完成,内容不会上传。「⇅ 结果回填」会把输出放回输入框:XML ⇄ JSON 时自动切换方向,美化/压缩时可接着做相反操作。
处理结果将显示在这里。
XML 有属性、文本、重复元素等 JSON 原生没有的概念,按下表约定转换。
| XML 写法 | 转成的 JSON | 说明 |
|---|---|---|
<name>张三</name> | "name": "张三" | 纯文本元素直接变成字符串 |
<user id="1"> | "@id": "1" | 属性统一加 @ 前缀,值都是字符串 |
<t>a</t><t>b</t> | "t": ["a", "b"] | 同名子元素出现多次才聚合成数组,单个不包数组 |
<p>开头<b>加粗</b>结尾</p> | "#text": "开头结尾", "b": "加粗" | 文本与子元素混排时,文本合并到 #text |
<nil/> | "nil": "" | 空元素转成空字符串;JSON 的 null 转 XML 时输出自闭合标签 |
<![CDATA[原文]]> | 作为元素文本 | CDATA 里的 <、& 不转义,按原文读取 |
XML 与 JSON 并非完全对等,以下差异需要留意。
| 问题 | 说明 |
|---|---|
| 属性值都是字符串 | XML 没有 JSON 的数字、布尔类型,<age>18</age> 转 JSON 得到的是字符串 "18" 而非数字 18,需要类型请自行转换。 |
| JSON 键名要能做 XML 标签 | JSON → XML 时键名只能含字母、数字、下划线、点和连字符且不能以数字开头;非法字符会替换成 _(如 "a b" → <a_b>,"1x" → <_1x>),特殊字符文本会做 <>& 转义。 |
| 注释与 DOCTYPE | 美化与压缩会保留 <!-- 注释 -->、<?xml?> 声明与 DOCTYPE;但转成 JSON 时注释不属于数据,会被丢弃。 |
| 先校验再输出 | 美化、压缩、转 JSON 前会用浏览器 XML 解析器校验:标签未闭合、引号缺失等错误会直接提示,不会生成残缺结果。 |
| 压缩会合并文本空白 | 压缩模式删除标签间的换行与缩进,元素文本中的连续空白折叠为单个空格;CDATA 区段原样保留,不受影响。 |
⚠️ 本工具仅在浏览器本地解析并重新生成文本,不会上传、保存你粘贴的任何内容。
XML 属性与文本在 JSON 中都以字符串表示,XML ⇄ JSON 往返不保证与原始数据逐字节一致(类型、注释、实体写法等可能变化)。结果请结合实际场景核对后再使用。
接口联调、配置文件、站点地图(Sitemap)、RSS、SVG 里到处都是 XML,而它往往是挤成一行或缩进乱七八糟的。
这个工具把开发中最常用的四个 XML 操作合到一起:
① XML 美化:按层级缩进(可选 2 / 4 空格),纯文本元素不折行,属性、注释、CDATA 原样保留;
② XML 压缩:去掉所有换行与多余空白,方便塞进一行参数;
③ XML → JSON:属性加 @ 前缀、文本放 #text、同名元素聚合成数组,便于在 JS 里直接使用;
④ JSON → XML:自定义根标签名,null 输出自闭合标签,非法键名自动修正;
⑤ 严格校验:标签未闭合、尖括号缺失等错误会被拦下并提示,绝不输出半成品。
处理流程:
① 解析校验:用浏览器内置 XML 解析器(DOMParser)解析,出现 parsererror(标签未闭合、属性缺引号等)时直接展示错误,不继续处理;
② 美化 / 压缩:把源码切成“标签 / 文本”记号流,正确区分 <!-- 注释 -->、<![CDATA[]]>、<?xml?>、自闭合标签与普通开闭标签,再按层级缩进或压成一行;纯文本叶子(开标签 + 文本 + 闭标签)保持在同一行;
③ XML → JSON:遍历 DOM 树,属性加 @ 前缀,纯文本元素输出字符串,混合内容文本合并到 #text,同名兄弟元素聚合为数组;
④ JSON → XML:递归生成带缩进标签,@ 键还原为属性、#text 还原为文本、数组展开成同名标签、null 输出自闭合标签,特殊字符做实体转义。
@属性、#text、同名元素聚数组约定;JSON 转 XML 支持自定义根标签、数组展开、null 自闭合与特殊字符转义。处理前先用浏览器解析器校验,错误精确定位。纯浏览器本地运行,适配黑夜模式。
<age>18</age> 只能转成 "age": "18"。工具不会猜测哪个字符串应该是数字(否则 010-88888888 这类号码也可能被误转)。需要类型时,在业务代码里自行 Number() 转换更安全。<tag> 会得到 "tag": ["a", "b"];只有一个时直接是字符串或对象,不额外包数组。这与多数 XML-to-JSON 库(如 xml2js 默认行为)一致。<![CDATA[ 是否有对应的 ]]>、注释是否以 --> 结束。报错信息会来自浏览器解析器并附带出错位置附近的内容,按提示修正后重新处理即可。审核通过后就会展示在留言板上,稍安勿躁~
还没有留言,来抢沙发吧!