我一直在编写的模块可以很好地与测试数据文件配合使用,但是完全可以摆脱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

10-08 04:07