Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ElementTree XML解析和urllib2.urlopen_Python_Xml_Urllib2_Elementtree_Celementtree - Fatal编程技术网

Python ElementTree XML解析和urllib2.urlopen

Python ElementTree XML解析和urllib2.urlopen,python,xml,urllib2,elementtree,celementtree,Python,Xml,Urllib2,Elementtree,Celementtree,我正在使用以下方式打开URL: response = urllib2.urlopen(url, data, timeout=_TIMEOUT) 并使用response.read(),它给出以下输出: <XMLlookup licenseid="X4X6X42" reason="OK" status="1" /> 提供以下错误消息: File "<string>", line 62, in parse File "<string>", line 38, in

我正在使用以下方式打开URL:

response = urllib2.urlopen(url, data, timeout=_TIMEOUT)
并使用
response.read()
,它给出以下输出:

<XMLlookup licenseid="X4X6X42" reason="OK" status="1" />
提供以下错误消息:

File "<string>", line 62, in parse
File "<string>", line 38, in parse
cElementTree.ParseError: no element found: line 1, column 0
文件“”,第62行,解析中
文件“”,第38行,正在解析中
cElementTree.ParseError:未找到元素:第1行第0列
但是当我删除行
response.read()
时,代码工作正常。我做错了什么?

而不是

response.read()
t = ET.parse(response)
r = t.getroot()
试一试

另外,您应该注意到,并非所有HTML都可以作为XML进行分析。如果您的请求返回XHTML,那么您将不会有问题,但在其他情况下,您将得到与您看到的非常类似的错误。

您需要使用:

t = ET.fromstring(response.read())

一个响应只能读取一次,因为它是一个类似于(实际上是一个AddInfo URL)的文件对象。对
read
的后续调用将返回一个空字符串,因为您总是阅读全文

因此,要么在使用
ET.parse(response)
之前不调用
read
,要么将结果存储在字符串中并用于ET:

txt = response.read()
# do what you want with txt (without changing it)
t = ET.fromstring(txt)

response.read()的输出是文本——上面的代码不起作用。我正在查询一个只输出XML的CGI脚本,因此我知道它不会生成HTML。谢谢您的解释!因此,我必须将结果存储到一个可以保存字符串的变量中。如果绳子很长怎么办?
t = ET.fromstring(response.read())
r = t.getroot()
t = ET.fromstring(response.read())
txt = response.read()
# do what you want with txt (without changing it)
t = ET.fromstring(txt)