如何解析通过这个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
但是这一切的确是打印无。
答
我会用lxml的XPath表达式:
from lxml import etree
root = etree.fromstring(xml)
timestamps = root.xpath('//rev/@timestamp')
至于你的代码,你没有得到的元素的属性。要做到这一点,请使用getAttribute
:
print y.getAttribute('timestamp')
什么解析器?限于lxml? – jsalonen
我使用了xml.dom.minidom.parseString函数 – user1943079
为什么不使用库来访问API,如[wikitools](http://code.google.com/p/python-wikitools/)? – svick