notepad++中批量格式化xml需手动安装兼容版xml tools 2.4.12插件(仅支持32位),通过多标签+宏录制模拟批量操作;格式异常多因编码/bom不匹配或语法错误;自动化场景应优先选用tidy或python脚本。

Notepad++ 里用 XML Tools 批量格式化 XML 文件,得先装对插件版本
XML Tools 插件在新版 Notepad++(v8.0+)里默认不兼容,直接从菜单安装会失败或功能缺失。它依赖旧版 API,必须手动下载 XML Tools 2.4.12(对应 Notepad++ v7.9.x 兼容版),否则 TextFX 类菜单项压根不出现,Pretty print (XML only) 功能也点不动。
- 去 GitHub releases 页面找
XMLTools_2.4.12.zip,别下最新版 - 解压后把
XMLTools.dll放进 Notepad++ 安装目录的plugins子目录(不是plugins\XMLTools) - 重启 Notepad++,确认菜单栏出现
Plugins → XML Tools
如果插件加载失败,检查 Notepad++ 是 32 位还是 64 位——XML Tools 2.4.12 只有 32 位 DLL,64 位 Notepad++ 无法加载,必须换用 32 位 Notepad++
单文件格式化没问题,但“批量”得靠“多文档 + 宏录制”硬凑
XML Tools 本身没有内置批量处理入口,所谓“批处理”其实是利用 Notepad++ 的多标签特性 + 宏操作模拟:打开所有待处理 XML 文件 → 录制一次格式化动作 → 对全部标签页回放宏。
- 先用 Windows 资源管理器全选 XML 文件,右键 → “Edit with Notepad++”,一次性打开多个标签页
- 切到第一个标签页,执行
Plugins → XML Tools → Pretty print (XML only)(快捷键Ctrl+Alt+Shift+B) - 点击
Macro → Start recording,再手动按一次Ctrl+Alt+Shift+B,然后Macro → Stop recording - 再点
Macro → Run a macro multiple times → Run until the end of file不行——这里要选Run multiple times… → Number of times: [填数字],数字等于你打开的标签页数
注意:宏回放时焦点必须留在第一个标签页,否则会重复操作同一文件;每执行一次宏,Notepad++ 自动切到下一个标签页——这是它默认行为,别干预
格式化结果不对?大概率是编码或 BOM 搞的鬼
Pretty print (XML only) 默认按当前文件编码解析,如果 XML 文件开头没声明 <?xml version="1.0" encoding="UTF-8"?>,又恰好是 UTF-8 with BOM,Notepad++ 可能误判成 ANSI,导致缩进错乱、中文变问号、甚至报 XML Parsing Error: not well-formed。
- 打开文件后先看右下角状态栏显示的编码(如
UTF-8-BOM),再核对文件头是否匹配 - 若不匹配,用
Encoding → Convert to UTF-8(不是 “Encode in…”)重编码,再试格式化 - 如果文件含非标准字符(比如控制字符、零宽空格),
Pretty print会静默失败——此时先用Search → Find Characters in Range → 0x00–0x1F清一遍
另外,该功能不校验 DTD 或 XSD,遇到未闭合标签、属性值缺引号等语法错误,会直接卡住或只格式化前半部分,不会报错提示
真要自动化批量处理,别死磕 Notepad++
用 Notepad++ 批量格式化本质是交互式模拟,稳定性和可控性差:不能跳过损坏文件、不能统一缩进宽度、不能保留/移除空白文本节点、也不能导出日志。一旦文件超 50 个,出错就得重来。
- 简单替代方案:命令行用
tidy -xml -indent -wrap 0 input.xml > output.xml(需提前装html-tidy) - 更可靠的是 Python 脚本,几行搞定:
import xml.dom.minidom<br>for f in ["a.xml", "b.xml"]:<br> dom = xml.dom.minidom.parse(f)<br> with open(f, "w") as out:<br> out.write(dom.toprettyxml(indent=" ", encoding="utf-8").decode())
- 注意
minidom会在文本节点间插入额外换行,若需严格保持原始结构,得换lxml.etree+pretty_print=True
Notepad++ 方案只适合临时、少量、人工可干预的场景;只要涉及路径通配、错误隔离、或后续集成进构建流程,就该切到命令行或脚本——插件不是万能胶,只是应急创可贴










