XML 元素和屬性比較

2018-04-25 16:12 更新

XML 元素 vs. 屬性

XML 元素:指的是從開始標(biāo)簽到結(jié)束標(biāo)簽的部分,元素可包含其他元素、文本或者兩者的混合物,并且元素也可以擁有屬性。

XML 屬性:提供關(guān)于元素的額外的信息。


在XML中,并有沒有規(guī)定何時(shí)使用屬性,以及何時(shí)使用子元素。


使用元素 vs. 屬性

數(shù)據(jù)可以存儲(chǔ)在子元素或?qū)傩灾小?/p>

讓我們來看下這些實(shí)例:

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

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>

在第一個(gè)例子中"sex"是一個(gè)屬性。在后面一個(gè)例子中,"sex"是一個(gè)子元素。但是兩者都提供了相同的信息。

沒有特別規(guī)定何時(shí)使用屬性,以及何時(shí)使用子元素。我的經(jīng)驗(yàn)是在HTML中多使用屬性,但在XML中,使用子元素,會(huì)感覺更像數(shù)據(jù)信息。


我喜歡的方式

我喜歡在子元素中存儲(chǔ)數(shù)據(jù)

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

本例中使用"date"屬性:

<note date="12/11/2002">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

本例中使用"date"元素:

<note>
  <date>12/11/2002</date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

本例中使用了擴(kuò)展的"date" 元素: (這是我最喜歡的方式):

<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>

避免使用屬性?

你應(yīng)該避免使用屬性?

一些屬性具有以下問題:

  • 屬性不能包含多個(gè)值(子元素可以)
  • 屬性不容易擴(kuò)展(為以后需求的變化)
  • 屬性無法描述結(jié)構(gòu)(子元素可以)
  • 屬性更難以操縱程序代碼
  • 屬性值是不容易測(cè)試,針對(duì)DTD

如果您使用屬性作為數(shù)據(jù)容器,最終的XML文檔將難以閱讀和維護(hù)。 嘗試使用 元素 來描述數(shù)據(jù)。 to describe data. 只有在提供的數(shù)據(jù)是不相關(guān)信息時(shí)我們才建議使用屬性。

不要這個(gè)樣子結(jié)束(這不是XML應(yīng)該使用的):

<note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>

一個(gè)屬性規(guī)則的例外

規(guī)則總是有另外的

關(guān)于屬性的規(guī)則我有一個(gè)例外情況。

有時(shí)我指定的 ID 應(yīng)用了元素。這些 ID 應(yīng)用可在HTML中的很多相同的情況下可作為 NAME 或者 ID 屬性來訪問 XML 元素。以下實(shí)例展示了這種方式:

<messages>
<note id="p501">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

<note id="p502">
  <to>Jani</to>
  <from>Tove</from>
  <heading>Re: Reminder</heading>
  <body>I will not!</body>
</note>
</messages>

以上實(shí)例的XML文件中,ID是只是一個(gè)計(jì)數(shù)器,或一個(gè)唯一的標(biāo)識(shí)符,來識(shí)別不同的音符,而不是作為數(shù)據(jù)的一部分。

在這里我想說的是,元數(shù)據(jù)(關(guān)于數(shù)據(jù)的數(shù)據(jù))應(yīng)當(dāng)存儲(chǔ)為屬性,而數(shù)據(jù)本身應(yīng)當(dāng)存儲(chǔ)為元素。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)