linter-xmllint需与linter框架、linter-ui-default及系统xmllint命令三者共存才能工作,缺一即静默失效;它仅校验xml格式良好性(well-formedness),不自动验证xsd/dt d,须手动配置--schema等参数。

linter-xmllint 装了没反应?先确认它根本不是独立插件
和 linter-jsonlint 类似,linter-xmllint 只是 linter 框架的一个 provider,不带解析能力,也不负责报错显示。它必须和三样东西共存才能工作:linter(核心框架)、linter-ui-default(画波浪线和提示)、xmllint CLI 工具(真正做校验)。缺任何一个,Atom 就当 XML 是纯文本——连语法高亮都可能不触发。
- 只装了
linter-xmllint,但没装linter→ 控制台报Failed to provide linter services,设置页里找不到配置项 - 装了
linter和linter-xmllint,但没装linter-ui-default→ 保存后控制台可能有日志,但编辑器里零提示、底部状态栏始终显示0 problems - 右下角 grammar 显示为
Plain Text或HTML→ 手动点击切换成XML,否则插件压根不启动
xmllint 命令行工具必须可用,且路径要配对
linter-xmllint 本身不解析 XML,它调用系统里的 xmllint 命令。如果终端里运行 xmllint --version 报错或找不到命令,插件就跳过检查,不会报错,只会沉默。
- 推荐本地项目级安装,避免环境 PATH 问题:
npm install libxmljs --save-dev不行,得用原生xmllint;macOS 用户可brew install libxml2,Linux 用户用apt install libxml2-utils,Windows 用户装 Zlatkovic 的 Windows 二进制包 - Atom 设置 → Packages →
linter-xmllint→ Settings,把Executable Path改成完整路径,例如:/usr/local/bin/xmllint(macOS/Linux)或C:\tools\xmllint.exe(Windows) - Mac 用户若用 nvm 或 asdf 管理环境,从桌面图标启动 Atom 会导致 PATH 丢失
xmllint;改用终端运行:atom --new-window .
校验只查“良好格式”,不验证 Schema 有效性
xmllint 默认只检查 well-formedness(标签闭合、属性引号、唯一根元素、特殊字符转义等),不自动加载 DTD/XSD 做 validity 校验。也就是说,即使 XML 结构完全合法,只要没声明 DOCTYPE 或没传 --schema 参数,它就不会报“缺少 required 字段”这类业务错误。
- 想验证 XSD:在终端手动跑
xmllint --schema schema.xsd document.xml --noout,再把该命令路径填进linter-xmllint的Arguments字段(如:--schema schema.xsd --noout) - 想验证 DTD:确保 XML 文件开头有
,并把 <code>schema.dtd放在同一目录或可访问路径 - 常见误判点:
、处理指令<?xml-stylesheet ... ?>、注释<!-- ... -->都属于良好格式范畴,xmllint不会因它们报错
容易被忽略的细节:空文件、BOM、编码与缩进干扰
XML 校验失败有时和内容无关,而是编辑器保存行为引入的隐性问题。
- 文件开头含 UTF-8 BOM(
EF BB BF)可能导致xmllint报Start tag expected;用 Atom 的Encoding菜单 →Encode to UTF-8(非 UTF-8 with BOM)重存 - 文件为空或只有空白字符(空格、换行)会被判为 not well-formed;
linter-xmllint不会跳过,而是直接报错 - 缩进风格(tab vs space)不影响合法性,但某些旧版
xmllint在解析含混合缩进的 CDATA 块时可能误报;建议统一用空格,并在xml-formatter插件中设indentation: " " - 校验触发时机是「保存时」,不是实时;如果改完没保存,波浪线不会出现——这点和
linter-eslint的Lint on Change不同,linter-xmllint没这个开关
实际校验链条非常薄:Atom 识别为 XML 语法 → linter-xmllint 捕获保存事件 → 调用你配好的 xmllint 路径 + 参数 → 返回 stdout/stderr 解析成错误位置。任一环节断开,就静默失效。最稳的做法是先在终端确认 xmllint 能跑通,再倒推配置。











