如何从列表中获得某种类型的唯一元素比我正在做的更干净?

时间:2011-07-07 00:43:28

标签: python lxml

我正在处理一些xml文件。文件的模式指定只能存在某种类型的元素之一(在这种情况下,我正在使用脚注元素)。

脚注元素中可以有多个脚注元素,我试图抓取并处理脚注元素,以便我可以遍历它以发现脚注元素。

这是我目前的做法

def get_footnotes(element_list):
    footnoteDict=od()

    footnotes_element=[item for item in element_list if item.tag=='footnotes'][0]
    for eachFootnote in footnotes_element.iter():
        if eachFootnote.tag=='footnote':
            footnoteDict[eachFootnote.values()[0]]=eachFootnote.text
    return footnoteDict

element_list是迭代整个树后与我相关的元素列表

所以我想知道是否有更多的pythonic方式来获取脚注元素而不是遍历元素列表,在我看来,这是笨拙的

footnotes_element=[item for item in element_list if item.tag=='footnotes'][0]

1 个答案:

答案 0 :(得分:2)

这样的事情应该可以胜任:

from lxml import etree

xmltree = etree.fromstring(your_xml)

for footnote in xmltree.iterfind("//footnotes/footnote"):
   # do something
   pass

如果您提供一些示例XML,则更容易提供帮助。

修改

如果您正在使用非常大的文件,则可能需要查看iterparse

这个问题似乎有一个很好的例子:python's lxml and iterparse method