Python和lxm中的XML

2024-06-25 23:25:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是pinnacle(下注)api,它返回一个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\u 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()')

但它不起作用。你知道吗


Tags: 文件函数treeparsefeedxmlurllib2req
2条回答

^{}设计为从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>

相关问题 更多 >