Skip to content

XML 元素

一个 XML 文档是使用 XML 元素来构建结构的。

一个 XML 元素由其开始标签到结束标签之间的所有内容组成,包括它们之间的内容。

一个元素可以包含:

  • 文本内容
  • 其他嵌套元素(子元素)
  • 属性(关于元素的元数据)
  • 以上几种的组合
  • 没有任何内容(空元素)

一个包含各种元素的 XML 文档示例:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price currency="USD">29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price currency="USD">39.95</price>
</book>
</bookstore>

在这个示例中:

  • <bookstore> 是根元素(root element),包含两个 <book> 元素。
  • 每个 <book> 元素都包含子元素(child elements):<title>、<author>、<year> 和 <price>。
  • <book> 元素还有一个属性(attribute)category。
  • <title> 元素有一个属性 lang。
  • <price> 元素有一个属性 currency。
  • <title>、<author>、<year> 和 <price> 包含文本内容。

没有内容的元素称为空元素(empty element)。空元素可以用两种方式表示:

  1. 使用开始标签后紧跟着结束标签:
<data></data>
  1. 使用自闭合标签(更简洁):
<data/>

这两种形式对于 XML 解析器是等效的。请注意,空元素仍然可以有属性:

<img src="logo.png" alt="Company Logo"/>

XML 元素和属性名称必须遵循以下规则:

  • 名称区分大小写(例如,<book> 不同于 <Book>)。
  • 名称必须以字母(a-z, A-Z)或下划线(_)开头。
  • 名称不能以序列 xml 开头(或 XML、Xml 等)。
  • 第一个字符后,名称可以包含字母、数字(0-9)、连字符(-)、下划线(_)和句点(.)。
  • 名称不能包含空格。
  • 冒号(:)保留用于命名空间(namespaces),不应用于常规名称。

几乎可以使用任何名称,只要它遵循这些规则。除了 xml 前缀限制外,没有保留关键字。

虽然规则很灵活,但遵循最佳实践可以提高可读性和可维护性:

  • 具有描述性: 使用清晰表明元素用途或内容的名称(例如,<customerAddress>、<orderItem>)。
  • 保持一致性: 选择一种命名约定,并在整个 XML 文档或项目中坚持使用。
  • 避免歧义: 虽然允许使用连字符和句点,但请注意,如果将 XML 数据直接映射到代码对象,某些编程语言或工具可能会特殊解释它们。使用下划线(first_name)或驼峰命名法(camelCase,如 firstName)通常更安全,兼容性更广。
  • 考虑可读性: 通常首选简短、有意义的名称,而不是非常长的名称(例如,<bookTitle> 而不是 <theCompleteTitleOfTheBookInQuestion>)。
  • 字符编码: 虽然名称中允许使用非 ASCII 字符(如 é, ö, å),但请确保您的 XML 文档声明了 UTF-8 编码(<?xml version="1.0" encoding="UTF-8"?>),并且所有处理软件都能正确处理 UTF-8,以避免问题。

XML 没有单一的官方命名风格,但一致性是关键。常见的风格包括:

风格示例描述
小写(lower case)<firstname>所有字母都是小写。单词之间可能难以区分。
大写(UPPER CASE)<FIRSTNAME>所有字母都是大写。有时用于常量或根元素。
蛇形命名法(snake_case)<first_name>单词之间用下划线分隔。常见于数据库和某些编程语言。
帕斯卡命名法(PascalCase,大驼峰命名法)<FirstName>每个单词都以大写字母开头。常见于面向对象编程。
驼峰命名法(camelCase,小驼峰命名法)<firstName>第一个单词以小写字母开头,后续单词以大写字母开头。常见于 JavaScript 和 Java。
烤串命名法(kebab-case)<first-name>单词之间用连字符分隔。常见于 HTML 自定义元素和 CSS。

选择一种适合您项目上下文的风格(例如,匹配数据库列名或编程语言约定),并始终如一地应用它。

XML 的关键优势之一是其可扩展性。您可以添加新的元素或属性,而无需破坏处理该文档的现有应用程序。

考虑这个初始 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<body>Don't forget me this weekend!</body>
</note>

一个应用程序可能被设计成只提取 <to>、<from> 和 <body> 元素来显示消息。

后来,XML 作者可能添加更多信息:

<?xml version="1.0" encoding="UTF-8"?>
<note importance="high">
<date>2023-10-27</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

一个专门查找 <to>、<from> 和 <body> 的精心设计的应用程序仍然应该能够正常工作。它只会简单地忽略新的 <date>、<heading> 元素和 importance 属性。

这允许 XML 格式随时间演进。应用程序可以根据需要选择支持新的元素/属性,而旧的应用程序通常可以继续使用它们理解的数据。