适当的XML格式

时间:2009-08-20 12:37:16

标签: xml

  

可能重复:
  Should I use Elements or Attributes in XML?

我正在用XML编写配置文件,而且我对整个XML热潮都很陌生。

我很好奇SO社区如何考虑如何在XML中表示各种值,因为我可以看到几种方法来实现它。

例如,什么时候应该将值作为属性,何时应该嵌套在标记中?

<node1 message="Hello world" id="1" />

对战

<node1>
  <message>Hello world</message>
  <id>1</id>
</node1>

显然,这是一个非常简单的例子......但是,作为属性与子节点的某些类型,是否有专家和骗局?或两者兼而有之?

6 个答案:

答案 0 :(得分:14)

我通常将属性视为元数据,或关于节点内数据的数据或限定数据。

e.g。在上面的例子中,我可能会将消息作为文本节点放置,并且具有与之相关的属性id。

这里没有对错,但我发现上述启发式有用。您可能希望在属性中尽可能多地存储的一种情况是SAX解析,其中元素回调具有所有属性的参数。即,您获得所有属性的一个回调,而不是'n'回调,每个数据一个回调。然而,这是以这种方式构建文档的一个非常专业的原因,在这之前我会仔细考虑。

答案 1 :(得分:2)

使用元素进行指定肯定会更加冗长和繁琐,另一方面,无法使用属性进行完全验证。

如果您有两个属性,其中一个必须指定,如果它们是架构中的子元素,则可以验证这一属性,只有属性是否需要时才能说明属性。

来自W3Schools Attributes页面:

  

使用属性的一些问题是:

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

在这个(略显人为的)示例中,车辆可能同时具有机翼和车轮或某些组合,我们无法强制执行至少一个定义的属性,而对于元素,我们可以使用带有minOccurs的choice元素来确保至少定义了一个元素。

name属性始终是必需的,因此它可以是没有验证问题的属性或元素。

<vehicle name="plane" wheels="3" wings="2"/>
<vehicle name="sled" runners="2"/>
<vehicle name="robin reliant" wheels="3"/>

<vehicle name="plane">
  <wheels>3</wheels>
  <wings>2</wings>
</vehicle>
<vehicle name="sled">
  <runners>2</runners>
</vehicle>
<vehicle name="robin reliant">
  <wheels>3</wheels>
</vehicle>

答案 2 :(得分:1)

我将ID(以及引用,短名称等)作为属性放入。其余的取决于你。我已经看过很多“仅限属性”的模式,对于某些类型的数据(短字符串,日期等)并没有那么糟糕,并且使得编写SAXParsers更容易,但它对我来说感觉不对。< / p>

有些人支持两者,即数据作为属性或字段,因此用户可以决定。

我个人认为如上所述的属性作为元数据是理所当然的事情。

答案 3 :(得分:1)

最佳做法是使元素优于属性。元素更易于从DOM树访问,并提供有关其描述的数据的结构数据。根据结构数据,我的意思是您可以确定元素的父母和子女与他们应该或可能是什么相对应。从模式的角度来看,这非常重要,其中模式定义的XML在结构上是自我意识的。属性的唯一好处是简洁,这也很重要。如果你可以使用单个属性,否则需要三个或四个嵌套标签,那么你应该使用一个属性。

答案 4 :(得分:1)

要考虑的另一点:属性中不能包含重要的空格。

答案 5 :(得分:0)

您的问题是关于属性与元素。 Theres是summarizes sources of information about attributes versus elements的页面。您还可以Google for attributes versus elements