XML 在 Python 和 lxml
XML in Python and lxml
我正在使用顶峰(投注)api,其中 returns 一个 XML 文件。目前,我将其保存到 .xml 文件中,如下所示:
req = urllib2.Request(url, headers=headers)
responseData = urllib2.urlopen(req).read()
ofn = 'pinnacle_feed_basketball.xml'
with open(ofn, 'w') as ofile:
ofile.write(responseData)
parse_xml()
然后在parse_xml函数中打开
tree = etree.parse("pinnacle_feed_basketball.xml")
fdtime = tree.xpath('//rsp/fd/fdTime/text()')
我假设将它保存为 XML 文件,然后读取该文件是没有必要的,但如果不这样做我就无法让它工作。
我尝试将 responseData
传递给 parsexml()
函数
parse_xml(responseData)
然后在函数中
tree = etree.parse(responseData)
fdtime = tree.xpath('//rsp/fd/fdTime/text()')
但是没用。
parse()
is designed to read from file-like objects。
但是您在两种情况下都传递了一个字符串 - pinnacle_feed_basketball.xml
字符串和 responseData
,这也是一个字符串。
第一种情况应该是:
with open("pinnacle_feed_basketball.xml") as f:
tree = etree.parse(f)
第二种情况:
root = etree.fromstring(responseData) # note that you are not getting an "ElementTree" object here
仅供参考,urllib2.urlopen(req)
也是一个类文件对象:
tree = etree.parse(urllib2.urlopen(req))
如果你想解析一个内存中的对象(在你的例子中是一个字符串),使用etree.fromstring(<obj>)
——etree.parse
需要一个类似文件的对象或文件名——Docs
例如:
import urllib2, lxml.etree as etree
url = 'http://www.xmlfiles.com/examples/note.xml'
headers = {}
req = urllib2.Request(url, headers=headers)
responseData = urllib2.urlopen(req).read()
element = etree.fromstring(responseData)
print(element)
print(etree.tostring(element, pretty_print=True))
输出:
<Element note at 0x2c29dc8>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
我正在使用顶峰(投注)api,其中 returns 一个 XML 文件。目前,我将其保存到 .xml 文件中,如下所示:
req = urllib2.Request(url, headers=headers)
responseData = urllib2.urlopen(req).read()
ofn = 'pinnacle_feed_basketball.xml'
with open(ofn, 'w') as ofile:
ofile.write(responseData)
parse_xml()
然后在parse_xml函数中打开
tree = etree.parse("pinnacle_feed_basketball.xml")
fdtime = tree.xpath('//rsp/fd/fdTime/text()')
我假设将它保存为 XML 文件,然后读取该文件是没有必要的,但如果不这样做我就无法让它工作。
我尝试将 responseData
传递给 parsexml()
函数
parse_xml(responseData)
然后在函数中
tree = etree.parse(responseData)
fdtime = tree.xpath('//rsp/fd/fdTime/text()')
但是没用。
parse()
is designed to read from file-like objects。
但是您在两种情况下都传递了一个字符串 - pinnacle_feed_basketball.xml
字符串和 responseData
,这也是一个字符串。
第一种情况应该是:
with open("pinnacle_feed_basketball.xml") as f:
tree = etree.parse(f)
第二种情况:
root = etree.fromstring(responseData) # note that you are not getting an "ElementTree" object here
仅供参考,urllib2.urlopen(req)
也是一个类文件对象:
tree = etree.parse(urllib2.urlopen(req))
如果你想解析一个内存中的对象(在你的例子中是一个字符串),使用etree.fromstring(<obj>)
——etree.parse
需要一个类似文件的对象或文件名——Docs
例如:
import urllib2, lxml.etree as etree
url = 'http://www.xmlfiles.com/examples/note.xml'
headers = {}
req = urllib2.Request(url, headers=headers)
responseData = urllib2.urlopen(req).read()
element = etree.fromstring(responseData)
print(element)
print(etree.tostring(element, pretty_print=True))
输出:
<Element note at 0x2c29dc8>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>