2014-02-27 106 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