校验您的XML
标签不匹配、未定义的实体、错误的命名空间——由浏览器自带的XML解析器找出并精确定位。不存储任何内容。
- 绝不存储
- 无需排队,无需等待
- 无需注册,无水印
粘贴XML,输入时即实时校验。
使用方法
粘贴XML
也可以直接拖入文件。任何内容都不会被发送出去。
查看结论
格式良好时,显示内容摘要;否则显示第一个问题的精确行号和列号。
修改并重新检查
直接在原处编辑,结果随输入实时更新。
两道不同的门槛,以及这里检查的是哪一道
XML定义了两个层级的正确性,而人们经常把它们混为一谈。格式良好(well-formed)指文档遵守XML自身的语法:只有一个根元素、每个标签都已闭合、嵌套正确、字符合法、&符号和尖括号正确转义、属性值带引号、同一元素内属性名不重复。有效(valid)则要求更高——文档还必须符合某个特定的schema,正确的元素按正确的顺序出现,并携带正确类型的值。本页面检查的是前者。任何XML解析器都会拒绝不满足它的文档,所以这项检查决定了文件到底能不能被读取。
出错的地方很有规律。未转义的&远远是最常见的——它会开启一个实体引用,所以直接粘贴到元素里的带查询字符串的URL就会破坏文档。文本中单独的<也是如此。其次是标签不匹配或未闭合、元素关闭顺序错误、出现两个根元素,以及一个XML根本不允许的控制字符,它悄无声息地藏在文件里,肉眼看不见。
本页面有意从不获取DTD或schema,这是一项安全特性,而不是缺失的功能。XML文档可以声明一个外部实体,解析器一旦解析它,就会去获取它指向的内容——磁盘上的文件,或内部网络上的地址。这就是XML外部实体(XXE)漏洞,是被利用最多的漏洞类别之一,而唯一彻底的防御就是不解析外部实体。因此这里不会向外连接任何东西,代价是按schema校验不在支持范围内。
您得到的是解析停止处的精确行号和列号。和所有解析器一样,那是文档开始说不通的地方,而不一定是错误所在:未闭合的标签通常会在其后意外出现的结束标签处才被报告,有时相隔数百行。报告的位置是您向上查找的起点,而不是需要修改的地方。
如果您需要的是别的
要按schema校验,xmllint是标准工具:XSD用xmllint --noout --schema schema.xsd file.xml,RELAX NG用--relaxng,DTD用--noout --valid。它会报告所有违规之处,而不是在第一个错误处停下——当文档是真的写错了、而不只是格式坏了时,这正是您需要的。
凡是涉及不可信的输入,解析器的配置比校验器更重要。无论使用哪种语言,都要明确关闭外部实体解析和DTD处理——Python用defusedxml,PHP用LIBXML_NONET,Java开启安全处理——因为好几个流行的解析器默认仍会解析实体,而漏洞就藏在默认设置里。
常见问题
我的XML会被存储吗?
不会。没有服务器调用,没有日志记录,不存储任何内容。页面加载完成后,您甚至可以断开网络,它照样能用。这一点在这里比看上去更重要:人们粘贴到在线格式化工具里的,往往是API响应、配置文件和错误信息,而这些内容经常包含令牌、客户记录和内部主机名。
“格式良好”是什么意思?
指文档遵守XML自身的规则:每个标签都已闭合、标签按正确顺序嵌套、有且只有一个根元素、属性值带引号,并且每个&和<要么已转义,要么属于合法的实体。这是关于XML可以问的两个问题中的第一个。第二个问题——文档是否符合某个特定schema——是另一回事,本页面不回答它。
能按DTD或XSD schema校验吗?
不能。这里检查的是文档是否为格式良好的XML,这也是大多数人实际遇到的错误。schema校验需要您的schema文件和一个支持校验的解析器,而没有任何浏览器内置这样的解析器;如果声称在这里能做到,要么是把您的文档发送到服务器,要么是悄悄不做检查。这个区别值得了解:一个文档可以完全格式良好,却仍然不符合它的schema。
最常见的XML错误有哪些?
最常见的是单独的&符号——&必须写成&,即使在URL中也是如此,所以直接粘贴到元素里的查询字符串会破坏文档。其次是:标签关闭顺序错误、出现两个根元素、使用了未定义的实体(例如 ,HTML定义了它而XML没有),以及使用了未声明的命名空间前缀。每种错误都会注明名称和位置。
HTML是合法的XML吗?
通常不是,而且这很正常,并不是错误。HTML允许<br>和<li>这类未闭合的标签、没有引号的属性值和单独的&符号;XML一个都不允许。如果您需要同时也是合法XML的HTML,那就是XHTML,它必须闭合每一个标签。
有大小限制吗?
取决于可用内存,而不是我们设定的上限。几MB的文档瞬间就能格式化;超大文档受限于能一次载入多少内容,而不是我们这边的任何限制。
小贴士: 检查格式良好性,而不是schema校验。会检查标签是否配对、嵌套是否正确、字符是否合法,并给出第一个问题的精确行号和列号。按DTD或XSD校验需要去获取它们,而这正是本页面有意从不发出的网络请求。
把这个工具放到您的网站上
博客、课程页面或帮助文章均可免费使用。粘贴一段代码,访客就能直接在您的页面上使用。