XML最佳实践:属性与其他元素

时间:2008-10-28 00:20:12

标签: xml

两者之间有什么区别,我应该在何时使用它们:

<person>
     <firstname>Joe</firstname>
     <lastname>Plumber</lastname>
</person>

<person firstname="Joe" lastname="Plumber" />

由于

6 个答案:

答案 0 :(得分:72)

有以元素为中心和以属性为中心的XML,在您的示例中,第一个是以元素为中心,第二个是 属性中心。

大多数情况下,这两种模式是等效的,但也有一些例外。

以属性为中心

  • 小于以元素为中心的大小。
  • 不太可互操作,因为大多数XML解析器会认为用户数据是由元素呈现的,Attributes用于描述元素。
  • 无法为某些数据类型显示可为空的值。例如nullable int
  • 无法表达复杂类型。

以元素为中心

  • 复杂类型只能表示为元素节点。
  • 非常具有互操作性
  • 比属性中心更大的尺寸。 (压缩可用于显着消除尺寸)
  • 可以使用xsi:nil =“true”
  • 属性表示可空数据
  • 解析器更快,因为解析器只查找用户数据的元素。

<强>实践

如果您真的关心XML的大小,请尽可能使用属性(如果合适),保留可以保存大文本值的可空,复杂类型和节点作为元素,如果您不关心XML的大小或者你在传输过程中有压缩启用,坚持使用元素。它更具可扩展性。

<强>背景

在DOT NET中,XmlSerializer可以将对象的属性序列化为属性或元素。 在最近的WCF框架中,DataContract序列化程序只能将属性序列化为元素,并且它比XmlSerializer更快,原因很明显,它只需要在反序列化时从元素中查找用户数据。

这篇文章也解释了这一点 Element vs attribute

答案 1 :(得分:5)

将来添加<address>属性的某个时候,您不希望将其设为XML属性。这是因为<address>可能是由街道地址,城市,国家等组成的更复杂的元素。

出于这个原因,您可能希望选择第一个子元素表单,除非您确定该属性不需要更深入。第一种形式允许将来具有更大的可扩展性。

如果您对空间感兴趣,请压缩XML。

答案 2 :(得分:4)

在我的公司,我们赞成第二种方法。

我们考虑的方式是“firstname”和“lastname”是“person”节点的属性,而不是“person”的子字段 “节点。这是一个微妙的差异。

在我看来,第二种方法更简洁,可读性/可维护性得到显着改善,这非常重要。

当然这取决于你的申请。我认为没有涵盖所有情景的一揽子规则。

答案 3 :(得分:3)

您可能还希望看到我提出的this问题的答案。我发现答案很有用。

答案 4 :(得分:2)

属性不是订单敏感的。根据您的情况,这可能是优势或劣势。

属性不能重复。如果“Joe”有两个名字,那么节点是唯一的方法。

答案 5 :(得分:2)

我发现以下信息非常有助于以简短的方式解释属性与元素的选择

使用属性的一些问题是:

属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不易扩展(未来的变化)

属性难以阅读和维护。使用元素数据。使用属性来获取与数据无关的信息。

来源:http://www.w3schools.com/xml/xml_attributes.asp