在Python中提取XML节点
这是我有的一部分XML文档:
<tr><td>Image:</td><td>
<a href="http://live.astrometry.net/status.php?job=alpha-201104-6758393&get=fullsize.png">fullsize.png</a></td></tr>
我需要提取一个属性,也就是在内容为'Image:'的<td>
元素之后的<a>
元素的href属性。这个<a>
元素没有其他的id或class属性可以用。
抱歉,如果这样听起来有点复杂。
提前谢谢你们!
4 个回答
1
如果你的输入文件和你提供的例子差不多,下面的代码可能对你有帮助:
from xml.dom.minidom import parseString
def tdlinks(xml):
o = []
l = parseString(xml).getElementsByTagName('td')
while l != []:
if l[0].firstChild.wholeText == unicode('Image:') and len(l) > 1:
if l[1].getElementsByTagName('a') != []:
o.append(l[1].getElementsByTagName('a')[0].getAttribute('href'))
l.pop(1)
l.pop(0)
return o
可以看看minidom的文档。如果在运行代码时发现了什么问题,这些文档可能会帮助你改进代码。
2
好的,最后给出一个优雅的(我希望是这样 ;))答案,使用一个简单的XPath表达式
from lxml import etree
root = etree.fromstring(your_text)
print root.xpath("//td[contains(text(), 'Image')]/following-sibling::td/a/@href")[0]