XML最佳实践:属性vs附加元素
两者有什么区别,我应该什么时候使用它们:
<person> <firstname>Joe</firstname> <lastname>Plumber</lastname> </person>
与
<person firstname="Joe" lastname="Plumber" />
谢谢
有以元素为中心和属性为中心的XML,在你的例子中,第一个是以元素为中心的,第二个是以属性为中心的。
大多数情况下,这两种模式是等价的,但也有一些例外。
以属性为中心
- 尺寸小于以元素为中心的尺寸。
- 由于大多数XMLparsing器都会认为用户数据是由元素表示的,所以用Attributes来描述元素,所以不能很好的互操作。
- 对于某些数据types,无法呈现可为空的值。 例如可空int
- 无法expression复杂的types。
以元素为中心
- 复杂types只能表示为一个元素节点。
- 非常可互操作
- 比属性为中心更大的尺寸。 (压缩可以用来显着消除大小)
- 可空数据可以用属性xsi:nil =“true”
- 由于parsing器仅查找用户数据的元素,所以更快parsing。
实际的
如果你真的关心XML的大小,只要你愿意,可以使用属性,留下可空,复杂的types和节点,它将保存大文本值作为元素,如果你不关心XML的大小,或者你有运输过程中的压缩启用,坚持元素。 它更具可扩展性。
背景
在DOT NET中,XmlSerializer可以将对象的属性序列化为属性或元素。 在最近的WCF框架中,DataContract序列化程序只能将属性序列化到元素中,而且比XmlSerializer更快,原因很明显,只需要在反序列化的时候从元素中查找用户数据。
这里的一篇文章也解释了元素与属性
有时在将来添加<address>
属性时,您不会希望将其设置为XML属性。 这是因为<address>
可能是由街道地址,城市,国家等组成的更复杂的元素。
出于这个原因,你可能想要select第一个子元素的forms,除非你确定这个属性不需要太深入。 第一种forms允许将来有更大的可扩展性。
如果您关心的是空间,请压缩您的XML。
在我的公司,我们赞成第二种方法。
我们思考的方式是,“名”和“姓”是“人”节点的属性 ,而不是“人”节点的子字段 。 这是一个微妙的差异。
在我看来,第二种方法更简洁,可读性/可维护性显着提高,这是非常重要的。
当然这取决于你的应用程序。 我不认为有一个涵盖所有情况的一揽子规则。
你可能也想看看我刚才提出的这个问题的答案。 我发现有用的答案。
属性不是顺序敏感的。 这可能是一个优势或劣势取决于你的情况。
属性不能重复。 如果“Joe”有两个名字,那么节点是唯一的出路。
我发现以下信息非常有助于在短时间内解释属性与元素的select
使用属性的一些问题是:
属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不容易扩展(为了将来的变化)
属性很难阅读和维护。 使用数据元素。 使用属性来获取与数据无关的信息。
来源: http : //www.w3schools.com/xml/xml_attributes.asp