XML 的版本指 W3C 规范迭代,1.0 是主流标准,1.1 因不兼容未被采纳;实际使用中应坚持 XML 1.0,声明明确且编码用 UTF-8。

XML 本身没有内置的“版本控制”机制,它的版本指的是 W3C 发布的规范标准版本,比如 1.0 和 1.1。所谓“版本”,是规范文档的迭代更新,不是像 Git 那样对单个文件做版本管理。实际使用中,版本信息通过文档声明 显式标明,且必须出现在第一行第一列。
XML 1.0 是事实标准
目前所有主流系统、解析器、框架(如 Java 的 DOM/SAX、.NET 的 XmlReader、浏览器XMLHttpRequest)都只支持 XML 1.0。它发布于 1998 年,经多次勘误修订(第二版 2000 年、第五版 2008 年),稳定可靠,向下兼容。
- 标签名和属性名只能用字母、数字、下划线、冒号、连字符等有限字符集
- 严格定义了空白符(空格、换行、制表符)的处理方式:全部视为原始内容保留
- 默认 编码 为 UTF- 8 或 UTF-16,encoding 属性需与文件真实编码一致,否则易乱码
- 不支持 NEL(U+0085)等某些 Unicode 行结束符
XML 1.1 是未被采纳的扩展尝试
XML 1.1 发布于 2004 年,初衷是更好适配 Unicode 更新,但因兼容性问题从未被广泛采用。它不是 1.0 的升级替代,而是不向下兼容的独立分支——这意味着一个合法的 1.1 文档,可能被 1.0 解析器直接拒绝。
- 允许元素 / 属性名使用更广的 Unicode 字符(如中文、emoji、数学符号等)
- 新增 NEL(Next Line)作为合法行结束符,适配 IBM 大型机环境
- 放宽了对控制字符的限制(例如 U +0001–U+0008、U+000B–U+000C 等可出现在内容中)
- 但这些改动导致与现有 工具 链冲突,绝大多数开发工具、服务器、IDE 默认不启用 1.1 解析模式
为什么 你几乎不会用到 1.1 版本
所有主流 配置文件 (Spring、Maven、AndroidManifest.xml)、数据交换格式(SOAP、RSS)、 前端 模板(如 XSLT 输入)都明确要求 XML 1.0。即使手动写version=”1.1″,只要解析器不支持,就会报“invalid character”或“not well-formed”错误。
- Java 的javax.xml.parsers 默认只认 1.0;设成 1.1 需额外配置工厂并启用特定特性
- 浏览器完全不支持 XML 1.1 解析;XMLHttpRequest 加载 1.1 文档会失败
- W3C 官网已将 1.1 标记为“obsolete”状态,不再维护
基本上就这些。写 XML 时,坚持用 1.0,声明写清楚,编码统一用 UTF-8,基本不会踩坑。