Python - 从XML解析单行

时间:2012-01-18 01:20:22

标签: python xml parsing xml-parsing

希望这是经验丰富的人的快速回答。我有一个包含URL的XML文件,我想从XML中获取URL,然后将其输入到我编写的下载脚本中。我唯一的问题是我似乎无法正确解析XML中的URL。这就是它的样子:

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

提前致谢!

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

output = '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')

output = 'http://website.com/file.exe'