2010-06-20 66 views
1

我需要一些非常簡單的XML輸出,所以我決定編寫自己的函數。這只是第一步,但有些事情發生了嚴重的錯誤。雖然我期望輸出看起來像這樣:Python輸出無序

<A> 
    <D> 
     <I></I> 
     <J></J> 
     <K></K> 
    </D> 
    <E> 
     <I></I> 
     <J></J> 
     <K></K> 
    </E> 

...等等。

而是輸出看起來是這樣的:

<I></I> 
    <J></J> 
    <K></K> 
<D> 
</D> 
<E> 
</E> 
<F> 
</F> 
<G> 
</G> 
<H> 
</H> 
<A> 
</A> 
<B> 
</B> 
<C> 
</C> 

我敢肯定,我的錯誤是很簡單的東西,但我無法看到它。這是我正在使用的整個文件:

def XMLChild(list, depth): 
    for arg in list: 
     print '\t' * depth + '<' + arg + '></' + arg + '>' 

def XMLParent(list, depth, child): 
    for arg in list: 
     print '\t' * depth + '<' + arg + '>' 
     child 
     print '\t' * depth + '</' + arg + '>' 

list1 = ['A', 'B', 'C'] 
list2 = ['D', 'E', 'F', 'G', 'H'] 
list3 = ['I', 'J', 'K', ] 

XMLParent(list1, 0, XMLParent(list2, 1, XMLChild(list3, 2))) 

正如你所看到的,這兩個函數都應該打印標籤。 XMLParent應該允許傳遞一個子函數,或者是另一個父類或者子類。無論我看到多少,我都無法弄清楚爲什麼它的打印方式如此。

回答

2

您沒有返回結果,而是直接打印出來。因此它將按功能執行的順序輸出。您的代碼等同於以下,其中明確了該函數的調用順序:

a = XMLChild(list3, 2) 
b = XMLParent(list2, 1, a) 
XMLParent(list1, 0, b) 

嘗試在每個功能構建一個字符串,將其返回給調用者。調用者然後可以將它附加到它自己的字符串緩衝區,然後返回它。然後你可以輸出像這樣的組合字符串,並在一個地方做所有的打印:

a = XMLChild(list3, 2) 
b = XMLParent(list2, 1, a) 
print XMLParent(list1, 0, b) 
+0

啊,我明白了。我認爲這也將使我的下一步,更容易地將其修改爲打印到文件。非常感謝。 – xnine 2010-06-20 06:51:38