【问题标题】:XML best practices: attributes vs additional elements [duplicate]XML 最佳实践:属性与附加元素 [重复]
【发布时间】:2008-10-28 00:20:11
【问题描述】:

这两者有什么区别,我应该什么时候使用它们:

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

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

谢谢

【问题讨论】:

    标签: xml


    【解决方案1】:

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

    大多数时候,这两种模式是等价的,但也有一些例外。

    以属性为中心

    • 比以元素为中心的尺寸更小。
    • 互操作性不强,因为大多数 XML 解析器会认为用户数据是由元素呈现的,因此使用属性来描述元素。
    • 无法为某些数据类型呈现可为空的值。例如可为空的整数
    • 无法表达复杂类型。

    以元素为中心

    • 复杂类型只能呈现为元素节点。
    • 非常具有互操作性
    • 大小大于以属性为中心的大小。 (压缩可用于显着减小大小。)
    • 可空数据可以用属性xsi:nil="true"表示
    • 解析速度更快,因为解析器只查找用户数据的元素。

    实用

    如果您真的关心 XML 的大小,请尽可能使用属性(如果合适的话)。在需要可为空、复杂类型或保存大文本值的地方使用元素。如果您不关心 XML 的大小,或者在传输过程中启用了压缩,请坚持使用元素,因为它们更具可扩展性。

    背景

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

    这里也有一篇解释它的文章 Element vs attribute

    【讨论】:

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

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

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

    如果您完全担心空间问题,请压缩您的 XML。

    【讨论】:

    • 只是好奇,但你不能两者兼而有之。将名字和姓氏作为属性,然后将地址作为节点。我想说的是你不必只选择一个。对吗?
    • 您是对的,但是为了在表示单个实体(原始示例中的“人”)的属性时保持一致性,您可能希望选择其中一个。这样您就不必记住哪个以哪种方式存储。
    • &lt;person firstname="Joe" lastname="Plumber"&gt; &lt;address street1="1234 Any Street" postalCode="12345" State="CA" City="Example" /&gt; &lt;/person&gt; 我不知道如何使其格式正确,但关键是,您并没有切断可扩展性。使用以属性为中心的 XML 避免的不是子元素,而是文本节点。
    【解决方案3】:

    在我的公司,我们倾向于第二种方法。

    我们认为“firstname”和“lastname”是“person”节点的属性,而不是“person”节点的子字段 “节点。这是一个微妙的区别。

    在我看来,第二种方法更简洁,可读性/可维护性显着提高,这一点非常重要。

    当然,这取决于您的应用程序。我认为没有涵盖所有情况的一揽子规则。

    【讨论】:

    • 第二种方法对人类来说更具可读性,但第一种方法对大多数解析器来说更具可读性。第一种方法也更具可扩展性。您应该阅读 @codemeit (ibm.com/developerworks/xml/library/x-eleatt.html) 引用的文章。
    【解决方案4】:

    我发现以下信息对于简要说明属性与元素的选择非常有帮助

    使用属性的一些问题是:

    属性不能包含多个值(元素可以)
    属性不能包含树结构(元素可以)
    属性不易扩展(以备将来更改)

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

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

    【讨论】:

    • 很遗憾,这个答案没有更多的选票,因为我认为它很好地总结了这些问题,特别是“属性难以阅读和维护。将元素用于数据。将属性用于以下信息与数据无关。”
    【解决方案5】:

    属性不区分顺序。根据您的情况,这可能是优势或劣势。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2015-08-21
      • 2011-12-27
      • 1970-01-01
      相关资源
      最近更新 更多