Python - разбирать одну строку из XML - PullRequest
1 голос
/ 18 января 2012

Надеюсь, это быстрый ответ для опытных.У меня есть один XML-файл, содержащий URL-адрес, и я хотел бы взять URL-адрес из XML-файла, а затем ввести его в сценарий загрузчика, который я написал.Моя единственная проблема в том, что я не могу правильно разобрать URL-адрес из XML.Вот как это выглядит:

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

Заранее спасибо!

Ответы [ 2 ]

9 голосов
/ 18 января 2012
>>> 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 голос
/ 18 января 2012
 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'

...