XML Schema - 哪个更正确?

时间:2012-11-16 03:16:05

标签: c# xml

假设O具有这两个等效(至少它们应该是)XML模式。实际的XML最终将由C#解析。我认为第二种方式是“更正确”,因为我将属性作为实际的属性,而不是子元素,是正确的吗?

<?xml version="1.0" encoding="ISO-8859-1"?>
<switch>
  <switch_name>switch1</switch_name>
  <software_version>1</software_version>
  <vendor>Cisco</vendor>
  <ip_address>1.1.1.1</ipaddress>
  <linecard>
    <model_type>12345</model_type>
 <fcport>
 <slot> 1</slot>
 <port> 1</port>
 <speed>4</speed>
 </fcport>

  </linecard>
</switch>

<switch>
 <switch name="switch1" version="1" vendor="Cisco" ip_address="1.1.1.1">
     <linecard model="12345">
  <fcport slot="1" port="1" speed="4">
</fcport>
<linecard>
</switch>
</xml>

3 个答案:

答案 0 :(得分:2)

在使用元素或属性属性进行选择时,没有“正确”的方式表示XML中的数据。选择适合你的任何东西。

通常元素会给你更多自由,因为你最终可能有子元素。即if属性是某种类型的列表,表示它在属性中以逗号分隔的值看起来非常非XML。

旁注:"XML schema"通常意味着不同的东西 - XML的结构化架构......我所称的“用XML表示数据”。

答案 1 :(得分:2)

两者都没有比另一个更“正确”,两者都适合你的榜样。没有违反任何规则。

那就是说,我认为我同意W3Schools关于这一点,因为数据应该放在子元素而不是属性中。特别是像IP地址这样的东西就像FEEL一样,应该是一个子元素而不是一个属性。我通常用于元数据的属性,例如自动生成的ID。

如果您以后想要考虑扩展,尤其如此 - 例如,如果要关联多个IP,该怎么办?使用子元素,您可以添加另一个元素,但是使用属性,您必须为每个添加添加一个新的属性名称(ip1,ip2,ip3 ...)。

答案 2 :(得分:0)

关于如何在元素和属性之间进行选择的经典文章如下:

http://xml.coverpages.org/elementsAndAttrs.html

我注意到在页面的末尾引用John Cowan引用我:“初学者总是问这个问题。那些有一点经验的人会热情地表达他们的意见。专家告诉你没有正确答案'。”