如何用XML表示列表?

时间:2009-01-15 23:50:04

标签: xml list

在XML中,如何表示列表?

使用封闭列表实体:

<person>
    <firstname>Joe</firstname>
    <lastname>Bloggs</lastname>

    <children>
        <child .../>
        <child .../>
        <child .../>
        <child .../>
        <child .../>
    </children>
</person>

或没有:

<person>
    <firstname>Joe</firstname>
    <lastname>Bloggs</lastname>

    <child .../>
    <child .../>
    <child .../>
    <child .../>
    <child .../>
</person>

8 个答案:

答案 0 :(得分:7)

我会把它放在一个实体中,以区别于其他元素。

答案 1 :(得分:7)

为了可扩展性,我将使用第一个解决方案(具有 children 节点的解决方案)。如果您希望存储有关所有子项的任何数据,那么您可以在其中放置一个方便的节点来放置属性。

答案 2 :(得分:2)

如果列表中元素的名称始终相同,那就不会产生很大的不同,因为如果您使用XPath或Linq-to-XML处理它,那么查询只会有如果有一个包装器节点,则再增加一个选择器,否则将是相同的。

另一方面,如果列表中的元素名称可能不同,那么如果有一个包装元素,它可以使处理列表更容易,因为你只需使用'*'作为列表元素下面的选择器而不是将所有元素过滤为具有指定名称集的元素。

所以它可能并不重要,但我倾向于选择一个包装元素,因为它可以直观地描述集合中的项目而不是。

答案 3 :(得分:2)

在您想要编写的代码中考虑它。:

对我来说......

spouse.children = person.children...

在语义上比...更好

for child in person:
    spouse.addChild(person.child)

答案 4 :(得分:1)

第一个对于简单列表会很好用,但是如果列表本身包含一个嵌套列表怎么办?!如果元素有两个不同的列表怎么办?为了保持一致,我更喜欢列表中的元素,并使用<item>标记或其他内容来显示子数据。这将有助于使用通用函数来解析所有列表。

答案 5 :(得分:1)

如果我们需要列表的通用 XML表示,我们将得出结论,必须使用以下表示

<_listSomeName>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
  <_listItem>...</_listItem>
</_listSomeName>

让我们分析一下

  1. 需要 <_listSomeName> 包装元素,因为我们可能有两个或多个列表作为元素的子元素,并且必须能够唯一且方便地标识每个列表。 “SomeName”部分用于使列表的名称唯一。

  2. 需要 <_listItem> 元素来包装每个列表项。它不能被省略,因为列表项可以具有复杂的结构(例如作为xml片段本身),将它标识为一个整体将是一项挑战。

答案 6 :(得分:1)

我会使用第一个解决方案。该列表具有语义相关性:它是相似元素的集合,因此应该是可识别的。在第二个解决方案中,列表不作为元素存在。

答案 7 :(得分:0)

恕我直言,这取决于域名。

对于你给出的例子,我会使用实体来封闭孩子,因为孩子本身不一定是这个人的属性,而是孩子的列表。

此外,如果您需要序列化/反序列化,使用外壳将有所帮助。