XML Schema:特定标签内或单个元素内的集合?

时间:2011-06-26 15:30:50

标签: xml xsd schema linq-to-xml

编写我的第一个复杂的XML模式我可能仍在考虑面向对象而不确定最佳实践是什么。这主要是因为我没有花太多时间在代码中读取XML文件。

我倾向于做的一件事是将所有集合放在它自己的元素中。让我们想出一个场景。我正在为一个人类型做一个模式,我不想保留关于其他人的汽车信息。

我总是这样做:

<xs:element name="Person">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Name" type="xs:string"/>
            <xs:element name="Address" type="xs:string"/>
            <xs:element name="Cars">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Car" type="CarType" maxOccurs="unbounded" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

但据说这是可能的,甚至可能更好:

<xs:element name="Person">
    <xs:complexType>
        <xs:sequence>
          <xs:element name="Name" type="xs:string"/>
          <xs:element name="Address" type="xs:string"/>
          <xs:element name="Cars" type="CarType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

当我使用C#和/或Linq-to-XML从XML文件中读取哪种方法更好?

我倾向于做我的事情,因为我觉得一个集合应该放在它自己的标签内,而不是像名字和地址一样的单一属性。

1 个答案:

答案 0 :(得分:1)

使用LINQ to XML时,可以说直接在Person节点下使用元素会更好。比较

person.Elements("Car")

person.Element("Cars").Elements()

但我个人更喜欢特殊的收藏元素,我认为它更清洁。为什么你认为另一种方式应该更好?谁说的?