Skip to content

XML 语法

XML (Extensible Markup Language,可扩展标记语言) 有一套简单的语法规则。这些规则确保 XML 文档结构一致,使人类和软件都能轻松读取和处理。

与 HTML 不同的是,在 HTML 中某些标签可以不闭合(例如旧版本中的 <p> 或 <li>,或者空元素如 <br>、<img>),XML 要求每个元素都有对应的结束标签。不包含内容的元素称为空元素,可以使用自闭合标签。

正确的 XML:

<message>
<text>This is a paragraph.</text>
<line_break/> <!-- Self-closing tag for an empty element -->
</message>

不正确的 XML(text 缺少结束标签):

<message>
<text>This is a paragraph.
</message>

注意:通常在 XML 文件开头看到的 XML 声明(例如 <?xml version="1.0" encoding="UTF-8"?>)是一个处理指令,而不是一个元素。它没有结束标签,不被视为文档元素树的一部分。

XML 标签区分大小写字母。开始标签 <Message> 不同于 <message>。开始标签和结束标签必须使用完全相同的大小写。

不正确(大小写不匹配):

<Message>This is incorrect</message>

正确:

<message>This is correct</message>

提示:一种常见约定是元素和属性名使用小写,但在您的项目或标准内部保持一致性是关键。

元素必须按正确的顺序嵌套。如果一个元素在另一个元素内部开始,它也必须在该元素内部结束。可以把它们想象成正确匹配的括号或俄罗斯套娃。

不正确的嵌套(** 在 <i> 打开之后、但在 <i> 关闭之前关闭):

<outer>**<i>This text is bold and italic**</i></outer>

正确的嵌套:

<outer>**<i>This text is bold and italic</i>**</outer>

在正确的示例中,<i> 元素完全在 ** 元素的边界内部打开和关闭。

每个有效的 XML 文档必须包含且仅包含一个顶级元素,称为根元素。所有其他元素都必须是这个单一根元素的后代。它充当整个文档内容的容器。

示例结构:

<root_element>
<child_element>
<subchild_element>...</subchild_element>
</child_element>
<another_child/>
</root_element>

属性提供有关元素的额外信息,并出现在开始标签内。它们的取值必须始终用单引号 (’) 或双引号 (”) 括起来。

不正确(属性值 important 未加引号):

<note priority=important>
<to>Alice</to>
<from>Bob</from>
</note>

正确(使用双引号):

<note priority="important">
<to>Alice</to>
<from>Bob</from>
</note>

正确(使用单引号):

<note priority='important'>
<to>Alice</to>
<from>Bob</from>
</note>

提示:选择一种引号样式(单引号或双引号)并始终使用它,以提高可读性。

某些字符在 XML 中具有预定义的含义。例如,小于号 < 表示标签的开始。

如果您需要将这些特殊字符作为字面文本内容或包含在属性值中,则必须使用其对应的实体引用。

这将导致 XML 解析错误:

<condition>if x < 5 then proceed</condition>

要解决此问题,将 < 替换为其实体引用 &lt;:

<condition>if x &lt; 5 then proceed</condition>

XML 中有五个预定义的实体引用:

实体字符描述
<<小于
>>大于
&&和号
''撇号(单引号)
""引号(双引号)

注意:虽然在元素内容中严格要求转义的只有 < 和 &,但最好也转义 > (&gt;)。在用双引号括起来的属性值中," 必须转义为 &quot;。在用单引号括起来的属性值中,' 必须转义为 &apos;。始终使用实体有助于提高清晰度并防止潜在问题。

您可以在 XML 文档中添加注释用于文档说明或澄清。语法与 HTML 相同:

<!-- 这是一个注释。注释会被 XML 解析器忽略。 -->

重要提示:注释不能出现在标签内部,并且注释本身内部不允许使用序列 --(双连字符)。

默认情况下,XML 解析器会保留元素内容中的空白字符(空格、制表符、换行符)。这与 HTML 浏览器不同,HTML 浏览器通常会将多个空白字符折叠成一个空格。

示例:

<message>Hello World</message>

在上面的示例中,“Hello”和“World”之间的多个空格被认为是重要的。

您可以使用 xml:space 属性(例如 xml:space="preserve" 或 xml:space="default")更明确地控制空白字符处理。

不同的操作系统使用不同的字符来表示行尾(例如,Windows 使用 CR+LF,Unix/Linux/macOS 使用 LF)。XML 解析器被要求在处理之前将所有行尾标准化为一个 LF 字符(换行符,\n)。

这确保了无论 XML 文档是在哪个平台上创建的,文本内容都能得到一致的处理。

遵守上述所有语法规则的 XML 文档被称为“格式良好”文档。格式良好是 XML 文档能够被 XML 工具成功解析和处理的最低要求。

把它想象成句子中的语法正确性;如果格式不良好,就无法理解其含义(结构)。