属性是 XML 元素的一部分。一个元素可以有多个唯一属性。属性提供了 XML 元素的更多信息。更准确地说,它们定义了元素的属性(property)。XML 属性始终是一个_名-值_对。
语法
XML 属性语法如下:
XML/HTML Code复制内容到剪贴板
- <element-name attribute1 attribute2 >
- ....content..
- </element-name>
其中 attribute1 和 attribute2 具有以下形式:
XML/HTML Code复制内容到剪贴板
- name = "value"
value 必须使用双引号(" ")或单引号(' ')包裹。这里 attribute1 和 attribute2 都是唯一的属性标签。
属性被用来给元素添加一个唯一标签,分类标签,添加布尔值属性或者关联一些字符串数据。下面的示例演示了如何使用属性:
XML/HTML Code复制内容到剪贴板
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE garden [
- <!ELEMENT garden (plants)*>
- <!ELEMENT plants (#PCDATA)>
- <!ATTLIST plants category CDATA #REQUIRED>
- ]>
- <garden>
- <plants category="flowers" />
- <plants category="shrubs">
- </plants>
- </garden>
属性被用来区分同名元素。当我们不希望为每种情况都创建一个新元素时。我们可以使用属性添加更多的细节以区分两个或多个类似的元素。
在上面的例子中,我们通过包含 category 属性分类了植物,并且给每个元素分配了不同的值。因此我们就有了两个 plants 类别,一个是 flowers,另一个是 color。这样我们都得到了两个带有不同属性的 plants 元素。
你还可以看到我们在 XML 的开头定义了这个属性。
属性类型
下表列出了属性的类型:
属性类型 |
描述 |
StringType
接受字符串值作为值。CDATA 是一个 StringType。CDATA 也是字符数据。这也意味着任何非标记字符都是合法的属性。
TokenizedType
这是一个限制类型。语法中指出的有效性约束会在属性值规范化之后应用。下面是 TokenizedType 属性:
- ID:用来指定元素是唯一的。
- IDREF:用来引用一个ID,该ID命名了另一个元素。
- IDREFS:用来引用一个元素的所有 IDs。
- ENTITY:指示属性将表示文档中的一个外部实体。
- ENTITYS:指示属性将表示文档中的一个外部实体。
- NMTOKEN:类似限制哪些数据可以是属性一部分的CDATA。
- NMTOKENS:类似限制哪些数据可以是属性一部分的CDATA。
EnumeratedType
在它的声明中包含一个预定义的值列表。在这里,它必须分配一个值。有两种类型的枚举属性:
- NotationType:它声明元素在 XML 文档的某些地方将被引用为一个 NOTATION 声明。
- Enumeration:枚举允许我们定义一个特定值列表,属性值必须与之匹配。
元素属性规则
以下是定义属性需要遵循的规则:
同一起始标签或者空元素标签中属性名只能出现一次。
属性必须使用属性属性列表声明(Attribute-List Declaration)定义在文档类型定义(DTD)中。
属性值中不能直接或者间接引用包含外部实体。
属性值中被直接或间接提及的任何实体的替代文本都不能包含小于号(<)。
将数据存储在子元素中
一个案例中使用了日期属性:
XML/HTML Code复制内容到剪贴板
- <note date="12/11/2002">
- <to>Tove</to>
- <from>Jani</from>
-
- <heading>Reminder</heading>
- <body>Don't forget me this weekend!</body>
- </note>
第二个案例中使用了日期元素:
XML/HTML Code复制内容到剪贴板
- <note>
- <date>12/11/2002</date>
-
- <to>Tove</to>
- <from>Jani</from>
- <heading>Reminder</heading>
- <body>Don't forget me this weekend!</body>
- </note>
第三个案例中使用了扩展日期元素(这是我们常用的方法):
XML/HTML Code复制内容到剪贴板
- <note>
- <date>
- <day>12</day>
- <month>11</month>
-
- <year>2002</year>
- </date>
- <to>Tove</to>
- <from>Jani</from>
- <heading>Reminder</heading>
-
- <body>Don't forget me this weekend!</body>
- </note>