在 XML(可扩展标记语言)中,属性是元素的附加信息,用于描述元素的特性。属性总是定义在元素的开始标签中,提供了有关元素内容的额外细节。属性具有键值对的形式,其中键是属性名,值是属性的具体值。


1. 属性的基本结构

每个 XML 属性都由以下几个部分组成:

  • 属性名称:属性的名称,必须是有效的 XML 标识符(例如,不能包含空格或特殊字符)。
  • 属性值:属性的实际值,必须用引号括起来(双引号 " 或单引号 ' 都可以)。

示例:

<person age="30" gender="male">
    John Doe
</person>

在此示例中:

  • age 和 gender 是属性名称。
  • "30" 和 "male" 是属性值。

2. 属性定义位置

属性始终定义在元素的开始标签内,并且在元素名称之后。它们与元素名称之间通过空格分隔。每个属性都由一个属性名称、一个等号和一个属性值组成。

示例:

<book title="XML for Beginners" author="John Smith" published="2023" />

这里,titleauthor 和 published 是属性名称,"XML for Beginners""John Smith" 和 "2023" 是它们对应的属性值。


3. 属性的使用规则

  • 属性名称不能包含空格。如果需要多个词组成的属性名称,可以使用连字符(-)或下划线(_)来分隔。
  • 属性值必须用引号括起来,可以使用双引号(")或单引号(')来括住属性值。
  • 属性是有序的,但通常 XML 解析器不会关心属性的顺序(即顺序不会影响解析结果)。

示例:

<person name="Alice" age="25" />
<person age="25" name="Alice" />

在这两个例子中,虽然属性的顺序不同,但它们的意义是相同的。


4. 属性的类型

XML 中的属性是以文本形式存储的,所有的属性值都是字符串。虽然 XML 解析器将所有属性值视为字符串,但你可以通过应用程序在处理 XML 时将其转换为其他类型(如数字、布尔值等)。

示例:

<product price="19.99" inStock="true" />

在这里,price 属性的值 "19.99" 是字符串类型,但在应用程序中可以将其作为浮动类型进行处理。inStock属性的值 "true" 也是字符串类型,但可以转换为布尔值。


5. 多个属性与元素内容

每个 XML 元素可以包含多个属性。它们定义在开始标签中,并且通过空格分隔。如果元素本身有内容,它会出现在开始标签和结束标签之间。

示例:

<book title="Learning XML" author="Jane Doe" genre="Technology">
    This is a book about XML.
</book>

  • titleauthor 和 genre 是元素 <book> 的属性。
  • This is a book about XML. 是元素 <book> 的文本内容。

6. 属性值的转义字符

属性值中的某些字符(如引号)需要被转义,以避免与属性值的引号冲突。XML 规定了转义字符来处理这些特殊字符。

转义字符:

  • & 转义为 &amp;
  • < 转义为 &lt;
  • > 转义为 &gt;
  • " 转义为 &quot;
  • ' 转义为 &apos;

示例:

<book title="XML &amp; XPath" author="John &quot;Doe&quot;" />

在此例中,& 被转义为 &amp;" 被转义为 &quot;


7. 属性的默认值

XML 本身不支持直接为属性设置默认值,但可以在应用程序处理 XML 时指定默认值。可以通过 DTD(文档类型定义)或 XML Schema 为元素和属性指定默认值。

示例:

<!DOCTYPE person [
  <!ATTLIST person age CDATA "30">
]>
<person name="John" />

在此例中,age 属性的默认值是 "30",如果 XML 中没有指定该属性的值,解析器将使用默认值。


8. 属性与子元素

属性与元素内容是不同的。属性用于提供额外的描述信息,而元素内容则表示元素的实际数据。一般来说,属性不应包含复杂的结构或多行文本。如果需要复杂的数据结构,应该使用子元素而不是属性。

示例(使用元素而非属性):

<book>
    <title>Learning XML</title>
    <author>Jane Doe</author>
    <genre>Technology</genre>
</book>

相比于以下使用属性的形式:

<book title="Learning XML" author="Jane Doe" genre="Technology" />

使用子元素可以提供更多灵活性,尤其当需要存储更复杂的数据时。


9. 元素与属性的选择

在 XML 中,选择使用元素还是属性取决于数据的结构和复杂度。一般来说,属性适用于简单的描述性数据,而元素适用于包含更复杂的数据结构或多个值的情况。

示例:

  • 适合使用属性
    • 用于描述元素的特性,如 id="123"status="active" 等。
    • 例如:<book price="19.99">
  • 适合使用元素
    • 用于包含详细信息或多个值的数据。
    • 例如:<address><street>123 Main St</street><city>Springfield</city></address>

总结

XML 属性是元素的附加信息,通常用于描述元素的特性或提供额外的元数据。属性由键值对组成,键是属性名称,值是属性值。通过合理使用属性,可以使 XML 文档更加结构化和清晰。虽然属性与元素在功能上有所不同,理解它们的使用规则和差异是正确使用 XML 的关键。