XML中元素VS属性

来源:互联网 发布:淘宝评价有效期是多久 编辑:程序博客网 时间:2024/06/13 02:51
    我想但凡使用XML的开发者特别是开发新手都或多或少有过这样的疑惑:到底什么信息应该写在属性里,什么信息应该写在元素里呢?属性和元素到底有哪些区别呢?哪些信息更加适合放在属性(或元素)里呢?在这篇博客中,我们将一起学习和区别XML开发中元素和属性的区别以及如何更好地使用XML的元素和属性。

一、关于定义

在区分两者的差异之前,首先要明确二者的具体含义以及本质所指,下面,我们来一起看一下他们各自的定义。

XML元素:指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

XML属性: 提供关于元素的额外(附加)信息。

从上面的定义,我们可以看出,属性强调的是关于元素的“额外(附加)”信息,而,元素在XML中主要用来存储数据。所以,二者的区别在于属性侧重于附属信息,而属性通常提供不属于数据组成部分的信息。

二、实例分析

我们来构造一个用于描述便条(note)的XML文件,可以采用三种形式,如下:

第一种:date为note的属性

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

分析:从上面三段不同的XML,我们可以看出:无论是采用元素还是属性的方式表达数据信息,最终表达的效果是一样的。但是,我们要注意:应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。对于上面三段不同的XML,最后一种是最为推荐的一种方式,因为使用属性虽然便捷,但是有诸多弊端,使用元素可以很好地避免这些缺陷。

因使用属性而引起的一些问题:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

那么什么时候该使用属性呢?我们再来看一个例子:

假如现在有很多便条(note),我们需要编号以示每个便条的区别,这个时候,我们可以采用如下的方式:

<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 仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
在此我们推荐的是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。

我们应该明白:描述数据的数据和数据无关,比如id肯定与note的数据内容无关,所以id的变化和note内容的变化并不会相互影响,但是如果换做date的话,它和note数据内容显然是相互影响的,一个note的date信息是不可改变的,但是一个note的ID却是可以改变的,只要它不会和现有的ID冲突即可。

2 0