这里有一个初学者问题:
说我有一块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
但这似乎没有我想做的事。
我哪里错了?
答案 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> []
>>>