Frage

Bit eines Anfängers Frage hier:

sagen, ich habe einen Block von xml:

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

etc.

Mit ElementTree ich tun kann:

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

all Häuser Knoten zu wählen, unabhängig von ihrer Mutter. Was ich jetzt tun möchte, ist jeder der Haus Knoten in einem separaten Baumobjekt drehen.

Ein Teil der Grund dafür ist, dass ich dann einen anderen Fund tun:

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

Ich kann so etwas tun:

for _house in houses:
    houseXml=_house.getiterator

, aber das scheint nicht zu tun, was ich will.

Wo soll ich denn falsch?

War es hilfreich?

Lösung

Sie können findall auf den von dem ersten findall zurück Elementen nennen:

>>> 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> []
>>>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top