2010-06-20 7 views
1

J'avais besoin d'une sortie XML très simple, j'ai donc décidé d'écrire mes propres fonctions. Ce n'était que le premier pas, mais quelque chose a vraiment mal tourné. Alors que je m'attendrais à ce que la sortie ressemble à ceci:Sortie Python en panne

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

... et ainsi de suite.

lieu la sortie ressemble à ceci:

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

Je suis sûr que mon erreur est quelque chose de très simple, mais je ne peux pas le voir. C'est le fichier entier que j'utilise:

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))) 

Comme vous pouvez le voir, les deux fonctions sont supposées imprimer des étiquettes. XMLParent devrait permettre le passage d'une fonction enfant, soit un autre parent, soit un enfant. Peu importe combien je le regarde, je n'arrive pas à comprendre pourquoi il imprime comme il est.

Répondre

2

Vous ne renvoyez pas le résultat, mais vous l'imprimez directement. Par conséquent, il sera produit dans l'ordre d'exécution des fonctions. Votre code est équivalent à ce qui suit, qui précise l'ordre dans lequel les fonctions sont appelées:

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

Essayez de construire une chaîne dans chacune des fonctions, retour à l'appelant. L'appelant peut ensuite l'ajouter à son propre tampon de chaîne et le retourner à son tour. Ensuite, vous pouvez sortir la chaîne combinée comme telle, et faire toutes les impressions dans un seul endroit:

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

Ah, je comprends. Je pense que cela fera également ma prochaine étape, pour le modifier pour imprimer dans un fichier, plus facile. Merci beaucoup. – xnine

Questions connexes