XML 屬性

XML 元素可以在開始標簽中包含屬性,類似 HTML。

屬性 (Attribute) 提供關于元素的額外(附加)信息。

XML 屬性必須加引號

屬性值必須被引號包圍,不過單引號和雙引號均可使用。

比如一個人的性別,<person> 標簽可以這樣寫:

<person gender="female">

或者這樣也可以:

<person gender='female'>

如果屬性值本身包含雙引號,則可以使用單引號,如下例所示:

<gangster name='George "Shotgun" Ziegler'>

或者您可以使用字符實體:

<gangster name="George "Shotgun" Ziegler">

XML 元素與屬性

請看這兩個例子:

<person gender="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>
<person>
  <gender>female</gender>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

在第一個例子中,sex 是一個屬性。在第二個例子中,sex 則是一個子元素。兩個例子均可提供相同的信息。

XML 中沒有規則可以告訴我們什么時候該使用屬性,而什么時候該使用子元素。我的經驗是在 HTML 中,屬性用起來很便利,但是在 XML 中,您應該盡量避免使用屬性。如果信息感覺起來很像數據,那么請使用子元素吧。

我最喜歡的方式

下面的三個 XML 文檔包含完全相同的信息:

第一個例子中使用了 date 屬性:

<note date="2008-01-10">
  <to>George</to>
  <from>John</from>
</note>

第二個例子中使用了 <date> 元素:

<note>
  <date>2008-01-10</date>
  <to>George</to>
  <from>John</from>
</note>

第三個例子中使用了擴展的 date 元素(這是我的最愛):

<note>
  <date>
    <year>2008</year>
    <month>01</month>
    <day>10</day>
  </date>
  <to>George</to>
  <from>John</from>
</note>

避免使用 XML 屬性?

使用屬性時需要考慮的一些事項是:

  • 屬性不能包含多個值(元素可以)
  • 屬性無法描述樹結構(元素可以)
  • 屬性不易擴展(為未來的變化)

請盡量使用元素來描述數據。而僅僅使用屬性來提供與數據無關的信息。

不要做這樣的蠢事(這不是 XML 應該被使用的方式):

<note day="10" month="01" year="2008"
to="George" from="John" heading="Reminder"
body="Don't forget the meeting!">
</note>

針對元數據的 XML 屬性

有時候會向元素分配 ID 引用。這些 ID 索引可用于標識 XML 元素,它起作用的方式與 HTML 中 ID 屬性是一樣的。這個例子向我們演示了這種情況:

<messages>
  <note id="501">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
  </note>
  <note id="502">
    <to>John</to>
    <from>George</from>
    <heading>Re: Reminder</heading>
    <body>I will not</body>
  </note> 
</messages>

上面的 ID 僅僅是一個標識符,用于標識不同的便簽。它并不是便簽數據的組成部分。

在此我們極力向您傳遞的理念是:元數據(有關數據的數據)應當存儲為屬性,而數據本身應當存儲為元素。