我正在尝试使用ElementTree解析下面显示的格式的XML数据:
<dataset>
<title>Birds of Kafiristan</title>
<creator>
<individualName>
<givenName>James</givenName>
<surName>Brooke</surName>
</individualName>
</creator>
<creator>
<organizationName>Bird Conservation Alliance</organizationName>
<address>
<deliveryPoint>P.O. Box 999</deliveryPoint>
<deliveryPoint>Mailstop 1234</deliveryPoint>
<city>Washington</city>
<administrativeArea>DC</administrativeArea>
<postalCode>9999</postalCode>
<country>USA</country>
</address>
<phone phonetype="voice">999-999-9999 x 123</phone>
<phone phonetype="fax">999-999-9999</phone>
<electronicMailAddress>contact@birds.org</electronicMailAddress>
<onlineUrl>http://www.birds.org/</onlineUrl>
</creator>
<contact>
<individualName>
<givenName>Josiah</givenName>
<surName>Harlan</surName>
</individualName>
</contact>
<pubDate>2010</pubDate>
<abstract>
<para>This dataset contains the results of a bird survey from Kafiristan</para>
</abstract>
<keywordSet>
<keyword>birds</keyword>
<keyword>biodiversity</keyword>
<keyword>animal ecology</keyword>
</keywordSet>
<distribution>
<online>
<url>http://birds.org/datasets</url>
</online>
</distribution>
</dataset>
(事实上,这只是一个更大的数据集的一个片段,其中包含其他标签,但它足以提出我的问题。)
我想简单地使用以下代码获取每个标记的元素值:
from xml.etree import ElementTree as ET
rootElement = ET.parse("example.xml").getroot()
for subelement in rootElement:
for subsub in subelement:
print subsub.tag,"-->", subsub.text #, subsub.attrib, subsub.items()
for subsubsub in subsub:
print subsubsub.tag, "-->", subsubsub.text
Ruiing上面的代码片段,我得到了一些元素的值,但不是全部 - 实际上,我无法获得嵌套元素的值(&#34; givenName&#34;和&#34; surName&#34 ;,嵌套在&#34; individualName&#34;里面,然后嵌套到&#34; creator&#34;)。
任何提示或提示?
与往常一样,提前感谢您提供的任何帮助1
答案 0 :(得分:1)
看起来像defaultdict在这里可能有用:
d = collections.defaultdict(list)
for element in rootElement.iter():
d[element.tag].append(element.text)
这将为您提供标记的映射,其中包含与每个标记关联的“文本”列表(每个元素的一个项目与xml中的该标记。)