Python:使用Element Tree进行更高效的XML查找

时间:2017-02-10 16:51:13

标签: python xml

目前我正在使用ElementTree来解析包含数千个对象的XML文件。 XML看起来与此类似(注意:有数千个对象):

<objects>
    <object> 
         <Name> Name 1 </Name> 
         <attrib1> Attrib1 </attrib1> 
         <attrib2> Attrib2 </attrib2> 
     </object>
 </objects> 

我所做的是创建一个函数,如下所示:

def objattribs(objname,objects): 
    for o in objects: 
          name = o.find('./Name').text 
          if name = objname: 
                'do something' 
 objname = 'SomeObject' 
 objects =   objects_XML.findall('./object')
 objattribs(objname,objects)

我遇到的问题是,这篇文章导致我的代码运行速度非常慢,因为它找到了XML中每个对象的名称:

 name = o.find('./Name').text

有没有更好的方法来加快我的计划?

1 个答案:

答案 0 :(得分:1)

尝试使用ElementTree支持的XPath:

def find_by_name(name, xml):
    return xml.findall("./object[Name='%s']" % name)

xml是表示xml.etree.ElementTree.Element的{​​{1}}。对于上面描述的具有10'000 <objects>个子元素的结构的XML文档,我得到了这个结果:

<object>