两者之间有什么区别,我应该在何时使用它们:
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
与
<person firstname="Joe" lastname="Plumber" />
由于
答案 0 :(得分:72)
有以元素为中心和以属性为中心的XML,在您的示例中,第一个是以元素为中心,第二个是 属性中心。
大多数情况下,这两种模式是等效的,但也有一些例外。
以属性为中心
以元素为中心
<强>实践强>
如果您真的关心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)
我发现以下信息非常有助于以简短的方式解释属性与元素的选择
使用属性的一些问题是:
属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不易扩展(未来的变化)
属性难以阅读和维护。使用元素数据。使用属性来获取与数据无关的信息。