Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python xml.ElementTree-函数,用于在变量中返回解析后的xml以供以后使用_Python_Xml_Elementtree - Fatal编程技术网

Python xml.ElementTree-函数,用于在变量中返回解析后的xml以供以后使用

Python xml.ElementTree-函数,用于在变量中返回解析后的xml以供以后使用,python,xml,elementtree,Python,Xml,Elementtree,我有一个函数,它将get请求和解析响应发送到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 然后,我使用此函数从

我有一个函数,它将get请求和解析响应发送到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
然后,我使用此函数从列表中循环对象,以获取XML并将其存储在变量中:

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'
回溯(最近一次呼叫最后一次):
文件“import_uac_wf.py”,第59行,在
tree=ET.parse(jx_任务_树,parser=parser)
文件“/usr/lib64/python2.7/xml/etree/ElementTree.py”,第1182行,在
作语法分析
parse(源,解析器)
文件“/usr/lib64/python2.7/xml/etree/ElementTree.py”,第647行,在parse中
源代码=开放(源代码,“rb”)
IOError:[Errno 36]文件名太长:
'\n\n\n\n\n\n\n\n'

有谁能帮助我,函数get_object()应该返回什么以及以后如何使用它,以便将返回的内容合并到一个变量中并进行分析?

关于当前的异常:

根据(重点是我的):

将XML节解析为元素树源是包含XML数据的文件名或文件对象

如果要从字符串加载XML,请改用
ET.fromstring

然后,正如您所怀疑的,第二个代码片段是完全错误的:

  • get\u object(jx)
    返回已解析的XML,因此返回ElementTree对象
  • 对它调用str,将产生它的文本表示(例如“”),这不是您想要的
你可以这样做:

jx_tasks_string=“”
对于jx任务中的jx:
jx_tasks_string+=ET.tostring(get_对象(jx).getroot())
由于jx_tasks_string是从解析一些XML blob获得的一些字符串的串联,因此没有理由再次解析它