这两者之间有什么区别,我应该在何时使用它们:
Joe Plumber
与
谢谢
有以元素为中心和以属性为中心的XML,在您的示例中,第一个是以元素为中心,第二个是以属性为中心.
大多数情况下,这两种模式是等效的,但也有一些例外.
以属性为中心
尺寸小于以元素为中心.
不是很可互操作,因为大多数XML解析器会认为用户数据是由元素呈现的,Attributes用于描述元素.
无法为某些数据类型提供可为空的值.例如nullable int
无法表达复杂的类型.
以元素为中心
复杂类型只能表示为元素节点.
非常可互操作
比属性中心更大的尺寸.(压缩可以用来显着消除尺寸)
可以用属性xsi表示可以为空的数据:nil ="true"
解析器更快,因为解析器只查找用户数据的元素.
实际的
如果您真的关心XML的大小,请尽可能使用属性,如果合适,请保留可以保存大文本值的可空,复杂类型和节点作为元素,如果您不关心XML的大小或者您有在运输过程中启用压缩,坚持使用元素.它更具可扩展性.
背景
在DOT NET中,XmlSerializer可以将对象的属性序列化为属性或元素.在最近的WCF框架中,DataContract序列化程序只能将属性序列化为元素,并且它比XmlSerializer更快,原因很明显,它只需要在反序列化时从元素中查找用户数据.
这里有一篇文章解释了它与 Element vs属性
将来添加属性时,您不希望将其设置为XML属性.这是因为
可能是一个更复杂的元素,由街道地址,城市,国家等组成.
因此,您可能希望选择第一个子元素表单,除非您确定该属性不需要更深入.第一种形式允许将来具有更大的可扩展性.
如果您对空间感兴趣,请压缩XML.