2010-03-25 64 views
0

位初學者的問題在這裏的:如何從ElementTree創建新的XML?

說我有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 

,但是這似乎並沒有做什麼我想要。

我哪裏錯了?

回答

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> [] 
>>>