将XML节点的信息作为属性或子节点更好吗?

时间:2010-09-08 02:29:04

标签: xml xsd

我更喜欢以下列方式构建XML文档:

<root>
   <node info1="blah" info2="blah" />
   <node info1="blah" info2="blah" />
</root>

而不是:

<root>
   <node>
      <info1>blah</info1>
      <info2>blah</info2>
   <node>
   <node>
      <info1>blah</info1>
      <info2>blah</info2>
   <node>
</root>

我认为这使事情更容易阅读并使导航更简单。有没有理由说第二个例子会更好?假设我的结构更好是否相同?

显然,如果数据中存在一对多的关系,我就可以将它移动到它自己的子节点。

3 个答案:

答案 0 :(得分:2)

为了简洁和富有表现力,我喜欢这些属性。

在下列情况下我会选择子节点:

  • 当我预期子节点有自己的附加信息时。例如:如果info1恰好是(或可能成为)结构而不是简单类型。
  • 让我们说info1是一个SQL语句或一个脚本或需要大量转义序列的东西之一。然后将其作为属性编写是很麻烦的。更容易使它成为子节点,以便您可以从[!CDATA [语法。
  • ]中受益

有时,在我的配置文件中,我支持这两种语法,因此配置文件的作者可以决定在他们认为合适时使用其中一种语法。

答案 1 :(得分:0)

这两种类型在DTD可能施加的约束方面略有不同,并且在流式排序方面(节点的所有属性都在其任何子节点之前传递)。

否则,你说它们是可以互换的,并且属性语法更简洁。

答案 2 :(得分:0)

两个未提及的差异:

  • 使用SAX属性访问xml始终以一个方式提供 一块,而元素可能会拆分
  • 可扩展性有利于元素:info1和info2已经暗示,有一天可能会有更多的信息;使用元素
  • 更容易
相关问题