Как мне создать новый xml из ElementTree? - PullRequest
0 голосов
/ 25 марта 2010

Немного вопроса новичка здесь:

Скажем, у меня есть блок xml:

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

и т.д.

С ElementTree я могу сделать:

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

для выбора всех узлов дома, независимо от их родителя. Теперь я хочу превратить каждый из узлов дома в отдельный объект дерева.

Частично причина в том, что я хочу сделать еще одну находку:

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

Я могу сделать что-то вроде:

for _house in houses:
    houseXml=_house.getiterator

но, похоже, это не то, что я хочу.

Куда я иду не так?

1 Ответ

2 голосов
/ 25 марта 2010

Вы можете вызвать findall для элементов, возвращаемых первым 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> []
>>>
...