我想但凡使用XML的开发者特别是开发新手都或多或少有过这样的疑惑:到底什么信息应该写在属性里,什么信息 应该写在元素里呢?属性和元素到底有哪些区别呢?哪些信息更加适合放在属性(或元素)里呢?在这篇博客中,我们 将一起学习和区别XML开发中元素和属性的区别以及如何更好地使用XML的元素和属性。
一、关于定义
在区分两者的差异之前,首先要明确二者的具体含义以及本质所指,下面,我们来一起看一下他们各自的定义。
XML元素:指的是从(且包括)开始标签直到(且包括)结束标签的部分。
元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。XML属性:提供关于元素的额外(附加)信息。
从上面的定义,我们可以看出,属性强调的是关于元素的“额外(附加)”信息,而,元素在XML中主要用来存储数据。所以,二者的区别在于属性侧重于附属信息,而属性通常提供不属于数据组成部分的信息。
二、实例分析
我们来构造一个用于描述便条(note)的XML文件,可以采用三种形式,如下:
第一种:date为note的属性
<notedate="08/08/2008"><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note>123456123456
第二种:date为单独的简单元素
<note><date>08/08/2008</date><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note>12345671234567
第三种:date分解为复合元素
<note><date> <day>08</day> <month>08</month> <year>2008</year></date><to>George</to><from>John</from><heading>Reminder</heading><body>Don'tforgetthemeeting!</body></note>12345678910111234567891011
分析:从上面三段不同的XML,我们可以看出:无论是采用元素还是属性的方式表达数据信息,最终表达的效果是一样的。但是,我们要注意:应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。对于上面三段不同的XML,最后一种是最为推荐的一种方式,因为使用属性虽然便捷,但是有诸多弊端,使用元素可以很好地避免这些缺陷。
因使用属性而引起的一些问题:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
那么什么时候该使用属性呢?我们再来看一个例子:
假如现在有很多便条(note),我们需要编号以示每个便条的区别,这个时候,我们可以采用如下的方式:
<messages> <noteid="501"> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don'tforgetthemeeting!</body> </note> <noteid="502"> <to>John</to> <from>George</from> <heading>Re:Reminder</heading> <body>Iwillnot</body> </note></messages>12345678910111213141234567891011121314
分析:上面的 ID 仅仅是一个标识符,用于标识不同的便签。它并不是便签数据的组成部分。
在此我们推荐的是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
我们应该明白:描述数据的数据和数据无关,比如id肯定与note的数据内容无关,所以id的变化和note内容的变化并不会相互影响,但是如果换做date的话,它和note数据内容显然是相互影响的,一个note的date信息是不可改变的,但是一个note的ID却是可以改变的,只要它不会和现有的ID冲突即可。
转自:http://blog.csdn.net/qiumengchen12/article/details/45332991