1

假设 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>
4

3 回答 3

2

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

通常元素会提供更多的自由,因为您最终可能会有子元素。即,如果属性是某种列表,则将其表示为属性中的逗号分隔值,看起来非常非 XML。

旁注:“XML 模式”通常意味着不同的东西——XML 的结构化模式……我称之为“XML 中的数据表示”。

于 2012-11-16T03:21:31.923 回答
2

没有一个比另一个更“正确”,两者都适用于您的示例。也不违反任何规则。

也就是说,我认为我同意W3Schools的观点,因为数据应该放在子元素而不是属性中。尤其是像 IP 地址这样的东西,感觉就像应该是子元素而不是属性的数据。我通常用于元数据的属性,例如自动生成的 ID。

如果您以后想考虑扩展,尤其如此——例如,如果您想关联多个 IP 怎么办?对于子元素,您可以只添加另一个元素,但对于属性,您必须为每个添加的元素提供一个新的属性名称(ip1、ip2、ip3...)。

于 2012-11-16T03:21:54.030 回答
0

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

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

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

于 2012-11-16T08:55:05.810 回答