2009-11-02 38 views
2

我需要從結構中提取數據並將其放入列表中,但我不知道結構有多少層。當我不知道有多少級別的數據時,如何循環遍歷數據結構的所有級別來提取所有數據?

對於每一個層面,我可以打電話level.children(),如果有低於當前一個沒有水平,則返回[],如果有,則返回[object, object, ...],對每一個我可以再次呼籲children()

我需要向下鑽取結構,直到我已將所有級別的數據提取到列表中。

當基於過這樣的結構:

<name>John Smith</name> 
<team link="http://teamwebsite.com"> 
    <name>Team Name</name> 
</team> 
<games> 
    <location> 
     <venue>A stadium</venue> 
    </location> 
</games> 

列表應該是這個樣子:

[ 
    [ 
     {'name': 'name', 'attrs': {}, 'text': 'John Smith', 'parent': None}, 
    ], 
    [ 
     {'name': 'team', 'attrs': {'link': 'http://teamwebsite.com'}, 'text': '', 'parent': None}, 
     {'name': 'name', 'attrs': {}, 'text': 'Team Name', 'parent': 1}, # the reference to its parent's position in the list 
    ], 
    [ 
     {'name': 'games', 'attrs': {}, 'text': '', 'parent': None}, 
     {'name': 'location', 'attrs': {}, 'text': '', 'parent': 1}, 
     {'name': 'venue', 'attrs': {}, 'text': 'A stadium', 'parent': 2}, 
    ], 
] 

我試圖找出Python的,我會用從獲得數據結構到我的列表。我需要一種自我延續的循環,但我不能想出一個好的解決方案。

任何東西指向我在正確的方向嗎?我確信對於這種我完全不知道的東西有一些很好的理論,但會很樂意閱讀。

回答

10

你描述recursion,但我猜有betterwaystoparseXML

+1

有嗎? XML是一棵樹。雖然如果你有一個XSD,你會知道哪些節點可能有孩子,有多少(即使「無數」是無界的)。 –

+2

@Thomas Owens:解析它我的意思是不必編寫算法來自己解析它... –

+0

啊,一個內置的迭代器。多美好:p。感謝這些鏈接,我將閱讀所有鏈接。乾杯。 – user116170

5

你在這裏使用的概念叫做「Recursion」。

+0

沒錯,就是這樣。我現在要閱讀它。謝謝。 – user116170

相關問題