1

我通过网络获取的 xml 代码如下所示

<?xml version='1.0' ?><liverequestresponse><liverequesttime>180</liverequesttime><livemessage></livemessage></liverequestresponse>

我的 python minidom 代码是

import urllib, urllib2, time
from xml.dom.minidom import parse
response = urllib2.urlopen(req)
the_page = response.read() 
#print the_page 
dom = parse(response)
name = dom.getElementsByTagNameNS('liverequestresponse')
print name[0].nodeValue

给出了一些错误

print the_page

工作正常

或者,如果它们是比 minidom 更好的任何其他库,请告诉我.. 我更喜欢预装在 linux 上的库

更新

错误

Traceback (most recent call last):
  File "logout.py", line 18, in <module>
    dom = parse(response)
  File "/usr/lib64/python2.7/xml/dom/minidom.py", line 1920, in parse
    return expatbuilder.parse(file)
  File "/usr/lib64/python2.7/xml/dom/expatbuilder.py", line 928, in parse
    result = builder.parseFile(file)
  File "/usr/lib64/python2.7/xml/dom/expatbuilder.py", line 211, in parseFile
    parser.Parse("", True)
xml.parsers.expat.ExpatError: no element found: line 1, column 0
4

2 回答 2

3

如果您在阅读响应内容response.read之前使用过。parse(response)第二次调用response.readparse正在执行)将导致一个空字符串。

最简单的解决方案是放弃第一个response.read呼叫。但是,如果您出于某种原因确实需要响应字符串,您可以尝试:

import urllib, urllib2, time
import StringIO
from xml.dom.minidom import parse
response = urllib2.urlopen(req)
the_page = response.read() 
#print the_page 
dom = parse(StringIO.StringIO(the_page))
name = dom.getElementsByTagName('liverequesttime')
text = name[0].firstChild
print text.nodeValue
于 2012-05-30T21:16:19.150 回答
1

一种使用lxml的方法,最近在 Python 中非常使用它来解析 XML,结果和性能都非常好:

import urllib2
from lxml import etree

with urllib2.urlopen(req) as f:
    xml = etree.parse(f)

xml.find('.//liverequesttime').text

最后一行的输出将是:180

于 2012-05-30T21:23:13.873 回答