格式化/压缩·校验定位·XPath 查询·树视图浏览·转义/CDATA·本地运行
XML 工具 专为查 XML、调 XML、读 XML 设计——左侧编辑器配 CodeMirror 6 语法高亮,右侧树视图把节点、属性、CDATA、注释、PI 分色展示,XPath 1.0 实时查询命中节点高亮 + 滚动定位,解析失败带行列号直接跳转。
| 需求 | 推荐工具 |
|---|---|
| 只想美化/压缩一段 XML | 本工具 或 代码格式化 都行 |
| 把 XML 转成 JSON/YAML/CSV | YAML/CSV/XML 互转 |
| 查询节点 / 浏览树结构 / 调 SOAP | 本工具(差异化) |
XPath 1.0 有个反直觉的坑:默认命名空间不能用空前缀查询。例如:
<feed xmlns="http://www.w3.org/2005/Atom">
<entry><title>Hello</title></entry>
</feed>
这里 //title 命中 0 个节点。本工具会自动把默认命名空间注册为 _ 前缀,所以应该写 //_:title。带前缀的命名空间保持原写法(//atom:link)。
整个流程基于浏览器原生 DOMParser / document.evaluate,不引入任何 XML 第三方库,包体最小、速度最快。所有数据停留在你的浏览器内。
⌘/Ctrl + Enter — 格式化⇧⌘ / Shift+Ctrl + Enter — 压缩Enter — 立即执行浏览器原生 document.evaluate 实现的是 XPath 1.0——//、@attr、[predicate]、text()、count()、contains()、starts-with()、name() 这些都能用。不支持 XPath 2.0/3.0 引入的 for、if、some/every、正则函数 matches() 等。开发者日常 90% 的查询 1.0 都够。
这是 XPath 1.0 的"特性"——根节点写了 xmlns="http://example.com" 后,//book 是查不到 <book> 的,必须带前缀。本工具自动把默认命名空间映射为 _: 前缀,所以应该写 //_:book。带前缀的命名空间(xmlns:atom="..." → //atom:link)保持原写法即可。
三者覆盖不同需求:代码格式化侧重多语言通用美化/压缩,XML 走 Prettier 风格;YAML/CSV/XML 互转主打数据格式互转,把 XML 当数据载体;本工具专注 XML 本身——树视图浏览、XPath 查询、节点定位。如果你只想美化一段 XML 选哪个都行,但要查节点、看结构、调 SOAP,用本工具最顺手。
XML 严格要求单一根元素且所有标签闭合——HTML 那套"忘记 </p> 也能渲染"在 XML 里行不通。状态栏会把浏览器返回的行列号显示出来,点一下跳过去看,常见三种原因:① 多个并列根元素(外面再套一层 <root>);② 标签大小写不一致(XML 区分大小写);③ 属性值没用引号包。
包裹把当前编辑器里的整段文本套上 <![CDATA[ ... ]]>——主要用途是把含 < & script 的 HTML 片段塞进 XML 节点而不被解析。如果原文里已经有 ]]>,会自动按 XML 规范拆段。拆包反过来,把所有 <![CDATA[...]]> 标记移除、只保留内容。两个按钮都是字符串级操作,不依赖解析成功。
编辑器(CodeMirror 6)几 MB 文本流畅。解析与树视图基于 DOM,5–10 MB 范围内体验良好;再大(几十 MB 节点结构)会明显变慢——这是 DOM 实现本身的限制,不是工具能优化的。超大文件建议先在终端用 xmllint --xpath 做查询。
完全不会。解析、格式化、XPath 都用浏览器原生 API(DOMParser / document.evaluate)在本地完成,本工具不发起任何网络请求,断网也能跑。
⌘/Ctrl + Enter 格式化;⇧⌘/Shift+Ctrl + Enter 压缩;XPath 输入框里按 Enter 立即执行。