standalone="yes"表示XML文档不依赖外部DTD,解析器不会加载外部DTD;若声明为"yes"却引用外部DTD会报错,而"no"则要求解析器加载外部DTD以支持实体等定义。

standalone="yes" 表示该 XML 文件是独立的,不依赖外部 DTD(文档类型定义)来解析或验证内容。
它告诉解析器:不需要加载外部 DTD
当声明 standalone="yes" 时,XML 解析器会假定文档中所有元素、属性、实体的定义都已内嵌在文档内部(比如通过内部 DTD 子集),或者完全不依赖 DTD。因此解析器不会尝试读取或处理任何外部 DTD(如 SYSTEM 或 PUBLIC 引用)。
- 如果文档实际引用了外部 DTD(例如
),但又声明了standalone="yes",大多数严格解析器会报错 - 如果文档没有 DTD,或只使用内部子集(如
]>),则standalone="yes"是合法且推荐的
standalone="no" 的含义相反
声明 standalone="no" 表示文档可能依赖外部 DTD 中的信息,比如默认属性值、实体定义、元素约束等。解析器在验证或展开实体时,需要加载并处理外部 DTD。
- 例如,若 XML 中用了
©这样的预定义实体,而该实体是在外部 DTD 中声明的,就必须设为standalone="no" - 很多 HTML 工具生成的 XHTML 文件会设为
standalone="no",因为它们依赖外部 DTD 定义标准 HTML 实体
它不影响语法正确性,但影响解析行为
standalone 属性只影响解析器是否查找外部 DTD,不改变 XML 是否“合法”(well-formed)。一个文件即使没写 standalone,也默认按 standalone="no" 处理(除非明确声明)。
- 常见写法:
- 注意:standalone 只能是
"yes"或"no",不能省略值,也不能写成standalone="true" - 如果不确定是否依赖外部 DTD,建议不加 standalone 声明,或显式设为
"no"更稳妥
实际开发中常被忽略,但对兼容性有影响
某些老版本解析器(如早期 Java SAX 解析器或嵌入式 XML 库)对 standalone 属性比较敏感;设错可能导致解析失败或实体无法识别。
- 纯数据交换场景(如 REST API 返回的 XML)通常无需 DTD,适合用
standalone="yes" - 需要复用标准 DTD(如 DocBook、TEI)的文档,必须设为
standalone="no" - 用工具生成 XML 时,检查输出是否自动添加了不匹配的 standalone 值










