2012-01-18 73 views
1

希望對於那些有經驗的人來說,這是一個快速的答案。我有一個XML文件,其中包含一個URL,我想從XML中獲取URL,然後將其輸入到我編寫的下載器腳本中。我唯一的問題是我似乎無法正確解析XML中的URL。這看起來是這樣的:Python - 從XML中解析單行文件

<program new-version="1.1.1.1" name="ProgramName"> 
<download-url value="http://website.com/file.exe"/> 
</program> 

在此先感謝!

回答

9
>>> code = '''<program new-version="1.1.1.1" name="ProgramName"> 
... <download-url value="http://website.com/file.exe"/> 
... </program>''' 

隨着lxml

>>> import lxml.etree 
>>> lxml.etree.fromstring(code).xpath('//download-url/@value')[0] 
'http://website.com/file.exe' 

隨着內置xml.etree.ElementTree

>>> import xml.etree.ElementTree 
>>> doc = xml.etree.ElementTree.fromstring(code) 
>>> doc.find('.//download-url').attrib['value'] 
'http://website.com/file.exe' 

隨着內置xml.dom.minidom

>>> import xml.dom.minidom 
>>> doc = xml.dom.minidom.parseString(code) 
>>> doc.getElementsByTagName('download-url')[0].getAttribute('value') 
u'http://website.com/file.exe' 

在哪你選擇完全取決於你。需要安裝lxml,但它是速度最快,功能最豐富的庫。 xml.etree.ElementTree有一個時髦的接口,它的XPath支持是有限的(取決於python標準庫的版本)。 xml.dom.minidom不支持xpath,並且趨於較慢,但實現了交叉平臺DOM

1
import lxml 
from lxml import etree 
et = etree.parse("your xml file or url") 
value = et.xpath('//download-url/@value') 
print "".join(value) 

輸出= 'http://website.com/file.exe'

你也可以使用cssselect

f = open("your xml file",'r') 
values = f.readlines() 
values = "".join(values) 
import lxml.html 
doc = lxml.html.fromstring(values) 
elements = doc.cssselect('document program download-url') //csspath using firebug 
elements[0].get('value') 

輸出= 'http://website.com/file.exe'