如何从ElementTree创建新的xml?

时间:2010-03-25 12:05:59

标签: python xml elementtree

这里有一个初学者问题:

说我有一块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 个答案:

答案 0 :(得分:2)

您可以对第一个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> []
>>>