我有一个向 xml 发送获取请求和解析响应的函数:
def get_object(object_name):
...
...
#parse xml file
encoded_text = response.text.encode('utf-8', 'replace')
root = ET.fromstring(encoded_text)
tree = ET.ElementTree(root)
return tree
然后我使用这个函数从列表中循环对象以获取 xmls 并将它们存储在变量中:
jx_task_tree = ''
for jx in jx_tasks_lst:
jx_task_tree += str(get_object(jx))
我不确定,如果该函数以正确的格式/形式返回我的数据,以便稍后按照我需要的方式使用它们。
当我想像这样解析变量 jx_task_tree 时:
parser = ET.XMLParser(encoding="utf-8")
print(type(jx_task_tree))
tree = ET.parse(jx_task_tree, parser=parser)
print(ET.tostring(tree))
它给我一个错误:
Traceback (most recent call last):
File "import_uac_wf.py", line 59, in <module>
tree = ET.parse(jx_task_tree, parser=parser)
File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 1182, in
parse
tree.parse(source, parser)
File "/usr/lib64/python2.7/xml/etree/ElementTree.py", line 647, in parse
source = open(source, "rb")
IOError: [Errno 36] File name too long:
'<xml.etree.ElementTree.ElementTree
object at 0x7ff2607c8910>\n<xml.etree.ElementTree.ElementTree object at
0x7ff2607e23d0>\n<xml.etree.ElementTree.ElementTree object at
0x7ff2607ee4d0>\n<xml.etree.ElementTree.ElementTree object at
0x7ff2607d8e90>\n<xml.etree.ElementTree.ElementTree object at
0x7ff2607e2550>\n<xml.etree.ElementTree.ElementTree object at
0x7ff2607889d0>\n<xml.etree.ElementTree.ElementTree object at
0x7ff26079f3d0>\n'
有人能帮我吗,函数 get_object() 应该返回什么以及以后如何使用它,那么返回的内容可以加入一个变量并进行解析?
关于您当前的例外情况:
根据[Python 3.Docs]:xml.etree.ElementTree。parse ( source, parser=None )(重点是我的):
将 XML 部分解析为元素树。source是包含 XML 数据的文件名或文件对象。
如果要从字符串加载XML,请ET.fromstring
改用。
然后,正如您所怀疑的,第二个代码片段是完全错误的:
get_object(jx)
返回一个已经解析的XML,所以一个ElementTree对象你可以这样做:
jx_tasks_string = ""
for jx in jx_tasks_lst:
jx_tasks_string += ET.tostring(get_object(jx).getroot())
由于jx_tasks_string是通过解析一些XML blob获得的一些字符串的串联,因此没有理由再次解析它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句