2014-02-27 73 views
0

好的。我知道这是重复的。在Python中从XML获取元素

但是,我是一个体面的程序员,我一直在尝试这个2小时,一无所获!

xml文件的前几行看起来如下所示。

<response> 
    <lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">2</int> 
    <lst name="params"> 
     <str name="d">100</str> 
     <str name="sort">score asc</str> 
     <str name="fl"> 
         . 
         . 
         . 

在这里,我想只是<int name="QTime"></int>之间的数字,也就是2在这种情况下。

我该怎么做? 我已经使用ElementTree,文档很糟糕。

回答

1

使用lxml.etree,并假设<response>是文档根目录,你可以这样做:

import lxml.etree 
xml = lxml.etree.parse(<file-like object>) 
root = xml.getroot() 
elements = root.xpath("int[@name='QTime']") 
values = [int(x.text.strip()) for x in elements] 

其中<file-like object>可以打开file对象或StringIO::StringIO对象,等...

elements会成为<int name="QTime">元素的列表。 values将是整数值的相应列表。

如果<response>不是文档根目录,则可以使用//response/int[@name='QTime']代替xpath

+1

'// int'扫描所有元素,速度较慢,并且可以返回比预期更多的结果。假设是树中的顶层元素,“int [@ name =”QTime“]'' – tdelaney

+0

为true,因此更新为... – isedev