XML屬性

weixin_33816946發表於2012-07-05

6 XML屬性

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

屬性(Attribute)提供關於元素的額外資訊。

 

6.1 XML屬性

從HTML,你會回憶起這個:<img src="computer.gif">。"src"屬性提供有關<img>元素的額外資訊。

在HTML中(以及在XML中),屬性提供有關元素的額外資訊:

<img src="computer.gif">

<a href="demo.asp">

屬性通常提供不屬於資料組成部分的資訊。在下面的例子中,檔案型別不資料無關,但是對需要處理這個元素的軟體來說卻很重要:

<file type="gif">computer.gif</file>

 

6.2 XML屬性必須加引號

屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person標籤可以這樣寫:

<person sex="female">

戒者這樣也可以:

<person sex='female'>

註釋:如果屬性值本身包含雙引號,那麼有必要使用單引號包圍它,就像這個例子:

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

戒者可以使用實體引用:

<gangster name="George &quot;Shotgun&quot; Ziegler">

 

6.3 XML元素vs.屬性

請看這些例子:

<person sex="female">

<firstname>Anna</firstname>

<lastname>Smith</lastname>

</person>

<person>

<sex>female</sex>

<firstname>Anna</firstname>

<lastname>Smith</lastname>

</person>

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

沒有什麼規矩可以告訴我們什麼旪候該使用屬性,而什麼旪候該使用子元素。我的經驗是在HTML中,屬性用起來很便利,但是在XML中,您應該儘量避免使用屬性。如果資訊感覺起來很像資料,那麼請使用子元素吧。

 

6.4 我最喜歡的方式

下面的三個XML文件包含完全相同的資訊:

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

<note date="08/08/2008">

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>

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

<note>

<date>08/08/2008</date>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>

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

 <note>

<date>

<day>08</day>

<month>08</month>

<year>2008</year>

</date>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>

 

6.5 避免XML屬性

因使用屬性而引起的一些問題:

 

 屬性無法包含多個值(子元素可以);

 

 屬性無法描述樹結構(子元素可以);

 

 屬性不易擴充套件(為未來的變化);

 

 屬性難以閱讀和維護。

 

請儘量使用元素來描述資料。而僅僅使用屬性來提供不資料無關的資訊。

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

<note day="08" month="08" year="2008"

to="George" from="John" heading="Reminder"

body="Don't forget the meeting!">

</note>

 

6.6 針對後設資料的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僅僅是一個識別符號,用於標識不同的便籤。它們不是便籤資料的組成部分。

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

相關文章