免费工具 XML 格式化、SQL 格式化与 YAML 校验
把一行写完的 SQL、压缩过的 sitemap.xml、docker-compose 配置贴进来:按统一缩进排好版;格式有问题时,直接告诉你在第几行第几列、解析器期待的是什么。
- SQL · XML · YAML
- 出错标出行号
- 本地处理
格式化并检查
示例是一份挤成一行的网站地图。用按钮加载 SQL、YAML 示例,或贴入自己的内容,结果随输入更新。
粘贴内容或打开本地文件,文件不会上传。
决定认哪些引号、注释和关键字。选 TapCub SQL 还会按 TapCub 洞察「SQL 查询」的规则检查。
作用于关键字、函数名和数据类型;表名、列名和字符串不会变。
行数
18
格式化结果的行数。
大小(字节)
684
格式化结果按 UTF-8 计算。
元素数
12
所有 XML 元素,含嵌套的。
语句数
—
按分号分隔。
文档数
—
用 --- 分隔的 YAML 文档。
键数
—
各层映射的键。
检查结果
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.example.cn/</loc>
<lastmod>2026-11-10</lastmod>
<xhtml:link rel="alternate" hreflang="zh-CN" href="https://www.example.cn/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://www.example.cn/en/"/>
</url>
<url>
<loc>https://www.example.cn/pricing?plan=pro&billing=yearly</loc>
<lastmod>2026-11-02</lastmod>
</url>
<!-- 博客文章在 sitemap-blog.xml 里 -->
<url>
<loc>https://www.example.cn/blog/utm-guide</loc>
<lastmod>2026-10-28</lastmod>
</url>
</urlset>
版本 v1.0更新于 更新记录
格式正确、有错,还是正确但有坑
三种格式给的反馈是同一类:结果上方的一句话告诉你属于哪种情况,下方逐条列出。
错误
内容解析不了。XML、YAML 是严格解析器停下的位置;SQL 是没闭合的引号、注释、括号,或者格式化组件读不懂的地方。行列号指向问题所在,或者紧挨在它后面。
注意
内容合法,但以后可能出问题:YAML 里换个解析器就会变类型的值,或者 TapCub SQL 查询会拒绝的写法。每条都说明会发生什么、怎么避免。
说明
除了空白以外改动了什么:YAML 的注释和锚点不会带到结果里,压缩成一行时会去掉注释。
统计数字
结果的行数和字节数,再加一个按格式的计数:XML 元素数、SQL 语句数、YAML 文档数和键数。sitemap 的元素数可以顺手核对网址有没有漏。
XML 和 SQL 是在原文上重新排版,值不会变;YAML 是先解析再重新写出,等价的值可能换一种写法:3.10 变成 3.1,空值写成 null——这正是程序读这个文件时看到的样子。
三步完成
不用安装,内容不会离开浏览器。
-
1
选格式
XML、SQL 或 YAML。SQL 还要选数据库,因为引号和注释规则不一样:MySQL 里
#开头是注释,SQL Server 里[name]是带引号的名称。 -
2
贴入或打开文件
贴入内容,或打开
.xml、.sql、.yaml文件。错误和提醒列在统计数字下面,每条带行号。 -
3
复制或下载
复制格式化结果或下载成文件。需要把 XML、SQL 塞进配置项或接口参数时,选「压缩成一行」。
查什么、按什么规则查
每种格式对「合法」的定义不同。有公开规范的按规范,依赖第三方组件的地方写明。
- XML:按 XML 1.0(第五版)的「格式良好」规则,遇到第一个致命错误就停(符合规范的 XML 解析器都必须这样);不做 DTD / Schema 校验
- SQL:排版用 sql-formatter 15.9.0;引号、注释、括号按各方言规则单独检查;不核对表名、列名是否存在
- YAML:用 js-yaml 4.3.2 按 YAML 1.2 解析(重复键、Tab 缩进都报错),再逐行找 YAML 1.1 解析器会读成别的类型的值
| 格式 | 检查项 | 依据 |
|---|---|---|
| XML | 只有一个根元素;标签成对、嵌套顺序正确 | XML 1.0 §2.1、§3 |
| XML | 属性加引号、不重复、值里没有 < | XML 1.0 §3.1 |
| XML | & 必须是实体或字符引用的开头;预定义实体只有 5 个 | XML 1.0 §4.1、§4.6 |
| XML | 注释里没有 --;声明在文件开头 | XML 1.0 §2.5、§2.8 |
| SQL | 字符串、带引号的名称、块注释闭合;括号配对 | 各方言的引号规则 |
| SQL · TapCub | 一条 SELECT / WITH,不能有注释、分号、反引号和写操作,至少用到四张视图之一 | 和 TapCub 洞察「SQL 查询」的服务端检查相同 |
| YAML | 缩进、重复键、没闭合的引号和括号 | YAML 1.2.2 |
| YAML | 未加引号的 yes / no / on / off、0 开头的数字、3.10、22:22 | YAML 1.1 类型定义(yaml.org/type) |
同一份 YAML,两种解析器读出两种结果
YAML 示例是一份 docker-compose 配置。它完全合法,但前两行这两个值换个解析器意思就变了,检查结果提醒的就是这类情况;后三行是其它常见的同类写法。
| 写法 | YAML 1.2(本工具、js-yaml) | YAML 1.1(如 PyYAML) | 稳妥写法 |
|---|---|---|---|
2222:22(端口映射) | 字符串 "2222:22" | 数字 133342(六十进制) | "2222:22" |
GZIP: on | 字符串 "on" | 布尔值 true | "on" |
0755 | 数字 755 | 数字 493(八进制) | "0755" 或 0o755 |
python-version: 3.10 | 数字 3.1 | 数字 3.1 | "3.10" |
NO(挪威的国家代码) | 字符串 "NO" | 布尔值 false | "NO" |
80:80 不受影响:冒号后面的 80 超过 59,不是合法的六十进制写法。Docker 官方文档要求 HOST:CONTAINER 一律写成带引号的字符串,就是为了避开这种只在部分端口上出现的问题。
这几类文件为什么解析不了
多数错误来自用一种格式的习惯写另一种格式。
用 HTML 的写法写 XML
属性不加引号、<br> 不自闭合、 、只写属性名不写值,在 HTML 里没事,在 XML 里直接报错。请写成 <br/>、 。
sitemap 网址里的 & 没转义
sitemaps.org 协议要求网址里的特殊字符做实体转义,带多个参数的网址在 <loc> 里要写成 &。格式不良好的 sitemap 根本读不了,搜索引擎只会报错,不会读里面的网址。
YAML 的值悄悄变了类型
版本号、邮编、端口映射、no / on 这类词都要加引号。文件照样能解析,要等到某个值以错误的类型被程序读到才出问题。
格式化成功不等于查询正确
查询排版很整齐,列名照样可能写错。SQL 检查只管语法,含义对不对要在数据库里跑一遍才知道。
直接用 SQL 查自己的统计数据
内置报表回答不了的问题,可以在 TapCub 洞察专业模式里写 SQL,查询本项目的四张视图。项目和时间范围由系统自动带上,查不到别的项目的数据。
xml格式化怎么做?怎么判断 XML 格式对不对?
选 XML,把内容贴进来就会按层级缩进排版。显示「格式正确」表示符合 XML 1.0 的语法规则:只有一个根元素、标签成对、属性加引号、& 和 < 已转义。按 DTD 或 XSD 校验是另一回事,本工具不做。
sql格式化怎么用?方言选哪个?
选 SQL,方言选查询实际运行的数据库,再贴入语句:关键字统一大写(或小写),每个子句单独一行。各数据库的引号写法不同(MySQL 用 `name`,SQL Server 用 [name],PostgreSQL 用 "name"),选错方言可能解析失败。Doris、TiDB 这类兼容 MySQL 协议的数据库选 MySQL。
为什么 YAML 里的 3.10 变成了 3.1?
不加引号的 3.10 是数字,而数字 3.10 就是 3.1,所有 YAML 解析器都这样,格式化只是让它显形。版本号请写成 "3.10",检查结果会把这类值提前标出来。
格式化后 YAML 的注释怎么没了?
YAML 是先解析成数据再重新写出来的,注释不属于数据,所以不会保留,工具会告诉你去掉了几段。如果只想校验,看检查结果、保留原文即可。
SQL 格式化会检查查询能不能跑吗?
不会。它只检查和数据库无关的语法:引号、注释、括号有没有闭合,格式化组件能不能读懂语句。表和列存不存在、有没有权限,只有数据库能回答。
docker-compose 的端口为什么建议加引号?
YAML 1.1 会把 xx:yy 形式、冒号后面不超过 59 的值当成六十进制数,2222:22 会被读成 133342。Docker 官方文档因此要求端口映射写成带引号的字符串。本工具会标出这类值。
TapCub SQL 方言检查哪些规则?
和 TapCub 洞察「SQL 查询」的服务端检查一致:只能有一条 SELECT 或 WITH;不能有注释、分号、反引号、反斜杠和变量;不能写入或访问系统库;必须用到 v_events、v_sessions、v_persons、v_autocapture 之一;不超过 2 万字符。
内容会上传吗?
不会。格式化和检查都在浏览器里完成,SQL、YAML 的组件从 tapcub.com 下载一次后在本地运行。本工具没有分享链接,贴入的查询和配置不会出现在网址里。