我一直在编写的模块可以很好地与测试数据文件配合使用,但是完全可以摆脱flickrapi的实时数据。
经过几天的无奈(看,我确实无事可做!),我认为我找到了问题,但我不知道解决方法。
内部测试数据返回type():<type 'str'>
外部测试数据返回type():<type 'str'>
##打开&
读取外部XML
实时数据返回type():<class
'xml.etree.ElementTree.Element'>
除了模块中的这一点之外,我还使用objectify。 Objectify可以很好地解析<type 'str'>
,但不会读取etree元素。我想我需要将类'xml.etree.ElementTree.Element'转换为str(),但尚未对此进行过任何讨论。
我从objectify.fromstring()得到的错误是:
Traceback (most recent call last):
File "C:\Mirc\Python\Temp Files\test_lxml_2.py", line 101, in <module>
Grp = objectify.fromstring(flickr.groups_getInfo(group_id=gid))
File "lxml.objectify.pyx", line 1791, in lxml.objectify.fromstring (src\lxml\lxml.objectify.c:20904)
File "lxml.etree.pyx", line 2994, in lxml.etree.fromstring (src\lxml\lxml.etree.c:63296)
File "parser.pxi", line 1614, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:93607)
ValueError: can only parse strings
请在老板再次放松那些该死的飞猴之前提供帮助!!!
import fileinput
from lxml import html, etree, objectify
import re
import time
import flickrapi
if '@N' in gid:
try:
if tst:
Grp = objectify.fromstring(test_data)
else:
Grp = objectify.fromstring(flickr.groups_getInfo(group_id=gid))
fErr = ''
mn = Grp.xpath(u'//group')[0].attrib
res = Grp.xpath(u'//restrictions')[0].attrib
root = Grp.group
gNSID = gid
gAlias = ""
err_tst = getattr(root, "not-there", "Error OK")
gName = getattr(root, "name", "")
Images = getattr(root, 'pool_count', (-1))
Mbr = getattr(root, "members", (-1))
最佳答案
解决方案是在调用objectify api之前停止将实时数据转换为xml.etree.ElementTree.Element
对象。
如果这是不可能的(我对此表示怀疑),则可以使用lxml.etree.tostring
将xml渲染回文本表示形式,然后将其传递给etree.objectify.fromstring
。