2009-01-15 83 views
7

在XML中,應該如何表示一個列表?應該如何用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> 

回答

7

爲了可擴展性,我會使用第一個解決方案(與子節點節點一起使用)。如果您希望存儲有關所有孩子的任何數據,那麼您有一個方便的節點來放置屬性。

7

我將它括在一個實體與其他元素區分開來。

+0

同意下面傑森傑克遜列出的原因。 – dacracot 2009-01-16 00:17:11

+0

此外,你可以有 ......所以你可以有不同類型的兒童列表,如果你使用封閉的實體。 – Eddie 2009-01-26 03:13:29

0

恕我直言,它取決於域。

對於你給出的例子,我會用實體來包圍孩子,因爲孩子本身不一定是人的屬性,但孩子的名單是。

此外,如果您需要序列化/反序列化,使用機箱將有所幫助。

1

第一個對於簡單列表來說工作得很好,但如果列表包含一個嵌套列表本身?如果一個元素有幾個不同的列表呢?爲了保持一致,我更喜歡列表中的元素,並使用<item>標籤或其他子數據。這將有助於使用通用函數來解析所有列表。

2

如果列表中元素的名稱總是相同,那麼它並沒有太大的區別,因爲如果您使用XPath或Linq-to-XML或其他方法處理它,那麼查詢將只是如果有一個包裝節點,還有一個選擇器,否則將是相同的。

另一方面,如果列表中的元素名稱可能不同,那麼如果存在包裝元素,它可以更容易地處理列表,因爲您可以只使用'*'作爲列表元素下的選擇器,而不是必須將所有元素過濾到具有指定名稱集合的元素。

所以它可能並不重要,但我傾向於更喜歡有一個包裝元素,只是因爲它可視化地描繪了集合中的物品不是物品。在代碼中它

2

想你會喜歡寫反對。:

我...

spouse.children = person.children... 

是很多比更好的語義...

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

如果我們需要一個列表的普遍 XML表示,我們會​​得出這樣的結論種類的以下表示必須使用

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

我們來分析一下這個

  1. <_listSomeName>包裝元素是需要的,因爲我們可能有兩個或更多的列表作爲元素的子元素,並且必須能夠唯一和方便地識別每個列表。 「SomeName」部分用於使列表名稱具有唯一性。

  2. <_listItem>元素是需要包裝每個單獨的列表項目。它不能被忽略,因爲一個列表項可以有一個複雜的結構(比如本身就是一個xml片段),並且將它標識爲一個整體將是一個挑戰。

1

我會使用第一個解決方案。該列表具有語義相關性:它是相似元素的集合,因此應該是可識別的。在第二種解決方案中,該列表不作爲元素存在。

相關問題