1

ネットワーク経由でフェッチされた私のxmlコードは次のようになります

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

私のPythonミニドムコードは

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

正常に動作します

または、それらがミニドムよりも優れている他のライブラリである場合、plzは私に教えてくれます..私は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)への 2 回目の呼び出しresponse.read(parse実行中) は、空の文字列になります。

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

最近PythonでXMLを解析するために非常に使用されているlxmlを使用したアプローチで、非常に優れた結果とパフォーマンスが得られます。

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 に答える