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

Coo*_*tar 77 xml

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

<person>
     <firstname>Joe</firstname>
     <lastname>Plumber</lastname>
</person>
Run Code Online (Sandbox Code Playgroud)

<person firstname="Joe" lastname="Plumber" />
Run Code Online (Sandbox Code Playgroud)

谢谢

Ray*_* Lu 72

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

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

以属性为中心

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

以元素为中心

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

实际的

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

背景

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

这里有一篇文章解释了它与 Element vs属性

  • 以属性为中心的 XML 与 JSON 具有巨大的互操作性优势。您所需要的只是一些关于将什么放入数组以及将什么视为数字或布尔值的提示,并且您可以进行完美的自动转换。 (2认同)

Gre*_*ill 5

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

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

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

  • 你是对的,但为了表示单个实体的属性(原始例子中的"人")的一致性,你可能想要选择一个或另一个.这样你就不必记住以哪种方式存储哪个. (2认同)