【问题标题】:Python - Parse Single Line from XMLPython - 从 XML 解析单行
【发布时间】:2012-01-18 01:20:22
【问题描述】:
希望这对有经验的人来说是一个快速的答案。我有一个包含 URL 的 XML 文件,我想从 XML 中获取 URL,然后将其输入到我编写的下载器脚本中。我唯一的问题是我似乎无法正确解析 XML 中的 url。这是它的样子:
<program new-version="1.1.1.1" name="ProgramName">
<download-url value="http://website.com/file.exe"/>
</program>
提前致谢!
【问题讨论】:
标签:
python
xml
parsing
xml-parsing
【解决方案1】:
>>> 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。
【解决方案2】:
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'