2010-03-25 8 views
0

Bit d'une question de débutant ici:Comment créer un nouveau fichier XML à partir d'ElementTree?

Dire que j'ai un bloc de xml:

<root> 
<district> 
    <house><room><door/><room></house> 
</district> 
<district> 
    <street> 
    <house>and so on</house> 
    </street> 

etc.

Avec ElementTree je peux faire:

houses=doc.findall(".//house") 

pour sélectionner tous les nœuds de la maison, quel que soit leur parent. Ce que je veux faire maintenant, c'est transformer chacun des nœuds de la maison en un objet arbre séparé.

Une partie de la raison de cette démarche est que je veux la faire une autre trouvaille:

door=houseXml.findall(".//door") 

je peux faire quelque chose comme:

for _house in houses: 
    houseXml=_house.getiterator 

mais cela ne semble pas faire ce que Je veux.

Où est-ce que je me trompe?

Répondre

2

Vous pouvez appeler findall sur les éléments retournés par la première findall:

>>> doc = """<root> 
... <district> 
... <house><room><door/></room></house> 
... </district> 
... <district> 
... <street> 
... <house>and so on</house> 
... </street> 
... </district> 
... </root>""" 
>>> 
>>> from xml.etree import cElementTree as ET 
>>> 
>>> r = ET.XML(doc) 
>>> 
>>> for house in r.findall('.//house'): 
... print house, house.findall('.//door') 
... 
<Element 'house' at 0xb7f3ea70> [<Element 'door' at 0xb7f3eab8>] 
<Element 'house' at 0xb7f3eb00> [] 
>>> 
Questions connexes