我经常倾向于用我的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>
欢迎任何建议和建议!
答案 0 :(得分:1)
我更喜欢第一个版本,因为:
属性的一些问题是:
- 属性不能包含多个值(子元素可以)
- 属性不易扩展(用于将来的更改)
- 属性无法描述结构(子元素可以)
元数据(有关数据的数据)应存储为属性,并且数据本身应存储为元素。
答案 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中,有几个人将其描述为“数据与元数据”问题,我认为这个问题总结得很好。元素中的数据,属性中的元数据。