XML格式化前必须先修复语法错误,如根节点缺失、标签未闭合、&需转义为&等;工具报错说明XML不合法,可用Python验证;注释偏移和CDATA解码是解析器特性,非bug,关键场景需备份原文件。
直接按快捷键没反应,不是插件问题,是XML本身不合法。XML Tools和Sublime-HTMLPrettify都要求文档结构完整:有且仅有一个根节点、所有标签闭合、&必须写成&、不能有裸露的或<code>>。常见错误包括:price & tax、value 、开头多出<code>ufeff(BOM)、末尾缺。这些都会触发XML Parse Error或not well-formed (invalid token),插件直接退出,不报具体行号。
Ctrl+F搜&,手动替换成&;再搜和<code>>,确认都在标签内Selection → Convert Case → To Lower Case可快速统一标签大小写(部分老系统导出XML大小写混用)HexViewer插件,打开后按Ctrl+Shift+P → Hex Viewer: Toggle Hex View,一眼识别x00、ufeff等不可见字符超长单行XML(比如一行几万字符)对解析器压力大,两个主流插件行为差异明显:XML Tools走DOM加载,内存吃紧,2MB以上大概率卡死;Sublime-HTMLPrettify基于js-beautify流式处理,更抗压,但默认不启用XML支持。
Sublime-HTMLPrettify后,必须编辑Preferences → Package Settings → HTMLPrettify → Settings – User,填入含"xml": {"enabled": true}的配置,否则它只认.html文件XML Tools若已装,优先用右键菜单XML Tools → Pretty Print (XML),比快捷键Ctrl+Alt+Shift+P容错稍好——它会尝试跳过局部错误继续格式化Indent XML:它不做语法校验,只机械加空格,对单行XML效果等于零一旦Sublime界面无响应(鼠标转圈超5秒),别等,强制中断。超长XML往往来自数据库导出或日志拼接,真实体积常超2MB,这时编辑器不是工具,是瓶颈。
View → Syntax → XML → File → Reopen with Encoding → UTF-8 → 再试格式化(避开原文件锁)xmllint --format input.xml > output.xml。需提前装libxml2(macOS用brew install libxml2,Ubuntu用sudo apt install libxml2-utils)xmllint也报错,说明XML真有问题——用Python一行救急:python -c "import xml.etree.ElementTree as ET; ET.parse('input.xml'); print('valid')",不报错才算过关无论用哪个插件,<!-- comment -->可能被移到上一行末尾,<![CDATA[...]]>会被解码成纯文本。这不是配置能关的功能,是底层解析器把它们当作普通文本节点处理的结果。
Ctrl+S另存为backup.xml
XML Tools的"preserve_whitespace": false只影响空行,不影响注释和CDATA;设成true反而会让缩进混乱lxml Python脚本或xmllint --nsclean --format
真正麻烦的从来不是按哪个键,而是你手上的XML到底“算不算XML”——解析器不讲情面,它只认标准。