目前我正在使用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
有没有更好的方法来加快我的计划?
答案 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>