您喜欢哪种XML结构,元素还是属性?(C#,PHP…)

您喜欢哪种XML结构,元素还是属性?(C#,PHP…),xml,Xml,可能重复: 我经常倾向于使用c#和php对象及其属性和数据创建xml,以便能够将数据和结构存储在文件、数据库中,并能够将其移植到其他系统 我的问题是使用元素结构或属性结构的利弊(如果有的话) 元素结构 <Body> <Row Name="Gender"> <Col> <Key>FieldId</Key> <Value>1</Value> </Col>

可能重复:

我经常倾向于使用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>

菲尔德
1.
父ID
菲尔德
3.
父ID
属性结构

<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>


欢迎提出任何建议和建议

我更喜欢第一版,因为:

属性的一些问题包括:

  • 属性不能包含多个值(子元素可以)
  • 属性不易扩展(用于将来的更改)
  • 属性不能描述结构(子元素可以)
元数据(关于数据的数据)应存储为属性,而数据本身应存储为元素


参考:

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

<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>

1.
0
2.
0
我对这种样式的主要观点是,它将易读性与对各种内容/值的支持结合在一起:属性样式经常会在内容中的换行符处阻塞(例如,MSXML和.Net将正确解析,但在再次输出源Xml时会规范化属性内容),因此如果要保留文本格式,以属性为中心的样式通常是一个错误的选择


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

相关问题:当您可以使用JSON?-1引用W3作为参考时,为什么要用XML将其复杂化。我很抱歉,但这需要劝阻。我支持这个答案。我使用这些属性只是为了数据的ID,但我将其他所有内容都放在子元素中。@Alin,w3.org它是原始源代码……发布多个问题的复制粘贴样板/逐字回答时要小心,这些问题往往被社区标记为“垃圾邮件”。