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