2012-01-18 4 views
1

経験豊富な方には素早くお答えいただきたいと思います。私はそれにURLを含む単一のXMLファイルを持っている、私はXMLからURLを取って、私が書いたダウンローダのスクリプトに入力したいと思います。私の唯一の問題は、XMLからURLを正しく解析することができないということです。これは、次のようになります。事前にPython - XMLからの単一行の解析

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

ありがとう! lxml

答えて

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

:上

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

:ビルトインxml.dom.minidom

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

:ビルトインxml.etree.ElementTree

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

あなたが選ぶのはあなた次第です。 lxmlはインストールする必要がありますが、最も高速で機能豊富なライブラリです。 xml.etree.ElementTreeにはファンキーなインターフェースがあり、XPathのサポートは制限されています(Python標準ライブラリのバージョンによって異なります)。 xml.dom.minidomはxpathをサポートしておらず、速度が遅くなる傾向がありますが、クロスプラットフォームDOMを実装しています。あなたも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'

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'

関連する問題