【发布时间】:2008-10-28 00:20:11
【问题描述】:
这两者有什么区别,我应该什么时候使用它们:
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
对
<person firstname="Joe" lastname="Plumber" />
谢谢
【问题讨论】:
标签: xml
这两者有什么区别,我应该什么时候使用它们:
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
对
<person firstname="Joe" lastname="Plumber" />
谢谢
【问题讨论】:
标签: xml
有以元素为中心和以属性为中心的XML,在你的例子中,第一个是以元素为中心的,第二个是 以属性为中心。
大多数时候,这两种模式是等价的,但也有一些例外。
以属性为中心
以元素为中心
实用
如果您真的关心 XML 的大小,请尽可能使用属性(如果合适的话)。在需要可为空、复杂类型或保存大文本值的地方使用元素。如果您不关心 XML 的大小,或者在传输过程中启用了压缩,请坚持使用元素,因为它们更具可扩展性。
背景
在 DOT NET 中,XmlSerializer 可以将对象的属性序列化为属性或元素。 在最近的 WCF 框架中,DataContract 序列化器只能将属性序列化为元素,比 XmlSerializer 快;原因很明显,它只需要在反序列化时从元素中查找用户数据。
这里也有一篇解释它的文章 Element vs attribute
【讨论】:
将来某个时候,当您添加 <address> 属性时,您不会希望将其设为 XML 属性。这是因为<address> 可能是由街道地址、城市、国家/地区等组成的更复杂的元素。
因此,您可能需要选择第一个子元素形式,除非您确实确定该属性不需要更深入。第一种形式允许将来有更大的可扩展性。
如果您完全担心空间问题,请压缩您的 XML。
【讨论】:
<person firstname="Joe" lastname="Plumber"> <address street1="1234 Any Street" postalCode="12345" State="CA" City="Example" /> </person> 我不知道如何使其格式正确,但关键是,您并没有切断可扩展性。使用以属性为中心的 XML 避免的不是子元素,而是文本节点。
在我的公司,我们倾向于第二种方法。
我们认为“firstname”和“lastname”是“person”节点的属性,而不是“person”节点的子字段 “节点。这是一个微妙的区别。
在我看来,第二种方法更简洁,可读性/可维护性显着提高,这一点非常重要。
当然,这取决于您的应用程序。我认为没有涵盖所有情况的一揽子规则。
【讨论】:
我发现以下信息对于简要说明属性与元素的选择非常有帮助
使用属性的一些问题是:
属性不能包含多个值(元素可以)
属性不能包含树结构(元素可以)
属性不易扩展(以备将来更改)
属性难以阅读和维护。使用数据元素。对与数据无关的信息使用属性。
【讨论】:
属性不区分顺序。根据您的情况,这可能是优势或劣势。
属性不能重复。如果“Joe”有两个名字,那么节点是唯一的出路。
【讨论】: