您更喜欢哪种XML结构,元素或属性? (C#,PHP ...)

时间:2011-08-09 11:36:58

标签: xml

  

可能重复:
  XML attribute vs XML element

我经常倾向于用我的c#和php对象创建xml及其属性和数据,以便能够将数据和结构存储在文件,数据库中,并能够将其移植到其他系统。

我的问题是使用元素结构或属性结构的优缺点(如果有的话)。

元素结构

<Body>
  <Row Name="Gender">
    <Col>
      <Key>FieldId</Key>
      <Value>1</Value>
    </Col>
    <Col>
      <Key>ParentId</Key>
      <Value></Value>
    </Col>
  </Row>
  <Row Name="Weight">
    <Col>
      <Key>FieldId</Key>
      <Value>3</Value>
    </Col>
    <Col>
      <Key>ParentId</Key>
      <Value></Value>
    </Col>
  </Row>
</Body>

属性结构

<Body>
  <Row Name="Gender">
    <Col Key="FieldId" Value="1" />
    <Col Key="ParentId" Value="0" />
  </Row>
  <Row Name="Weight">
    <Col Key="FieldId" Value="2" />
    <Col Key="ParentId" Value="0" />
  </Row>
</Body>

欢迎任何建议和建议!

2 个答案:

答案 0 :(得分:1)

我更喜欢第一个版本,因为:

  

属性的一些问题是:

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

元数据(有关数据的数据)应存储为属性,并且数据本身应存储为元素。

参考:http://www.w3schools.com/DTD/dtd_el_vs_attr.asp

答案 1 :(得分:1)

我通常更喜欢混合风格,其中每个元素的“主要内容”是文本节点。在您的示例中,“值”显然是主要内容,因此我将使用:

<Body>
  <Row Name="Gender">
    <Col Key="FieldId">1</Col>
    <Col Key="ParentId">0</Col>
  </Row>
  <Row Name="Weight">
    <Col Key="FieldId">2</Col>
    <Col Key="ParentId">0</Col>
  </Row>
</Body>

我对这种风格的主要论点是它将易读性与对各种内容/值的支持相结合:属性样式经常在内容中的换行符上窒息(例如,MSXML和.Net将正确解析但在归属时归属化属性内容你再次输出源Xml),所以如果你想保留文本格式,以属性为中心的风格通常是一个糟糕的选择。

在与评论相关的问题XML attribute vs XML element中,有几个人将其描述为“数据与元数据”问题,我认为这个问题总结得很好。元素中的数据,属性中的元数据。