如何解析通过这个XML?

问题描述:

假设我有以下来自mediawiki API的XML响应。我想找出维基主题修改的最早日期,在这个例子中是2005-08-23。我如何通过xml解析来找出答案。我使用python btw。如何解析通过这个XML?

<?xml version="1.0"?> 
    <api> 
     <query-continue> 
     <revisions rvcontinue="46214352" /> 
     </query-continue> 
     <query> 
     <pageids> 
      <id>2516600</id> 
     </pageids> 
     <pages> 
      <page pageid="2516600" ns="0" title="!Kung language"> 
      <revisions> 
       <rev timestamp="2005-08-23T00:58:40Z" /> 
       <rev timestamp="2005-08-23T01:01:00Z" /> 
       <rev timestamp="2005-09-02T07:21:37Z" /> 
       <rev timestamp="2005-09-02T07:24:28Z" /> 
       <rev timestamp="2006-01-06T07:45:35Z" /> 
       <rev timestamp="2006-03-22T09:03:23Z" /> 
       <rev timestamp="2006-03-30T05:50:12Z" /> 
       <rev timestamp="2006-03-30T20:33:22Z" /> 
       <rev timestamp="2006-03-30T20:35:05Z" /> 
       <rev timestamp="2006-03-30T20:37:16Z" /> 
      </revisions> 
      </page> 
     </pages> 
     </query> 
    </api> 

我尝试以下

revisions = text.getElementsByTagName("revisions") 
for x in revisions: 
    children = x.childNodes 
    for y in children: 
     print y.nodeValue 

但是这一切的确是打印无。

+0

什么解析器?限于lxml? – jsalonen

+0

我使用了xml.dom.minidom.parseString函数 – user1943079

+0

为什么不使用库来访问API,如[wikitools](http://code.google.com/p/python-wikitools/)? – svick

我会用lxml的XPath表达式:

from lxml import etree 

root = etree.fromstring(xml) 
timestamps = root.xpath('//rev/@timestamp') 

至于你的代码,你没有得到的元素的属性。要做到这一点,请使用getAttribute

print y.getAttribute('timestamp')