Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 在…列表的列表中查找所需的子对象。。物体_Python_List_Suds - Fatal编程技术网

Python 在…列表的列表中查找所需的子对象。。物体

Python 在…列表的列表中查找所需的子对象。。物体,python,list,suds,Python,List,Suds,我正在使用suds,为了实现接收和发送附件(我已经这样做了),我需要使用“低级”suds对象。其中一个用于生成SOAP XML的对象具有以下结构(伪代码): 当我收到此对象时,我必须检查: 其名称为“文件” 然后选择名为“信封”的孩子 然后选择名为“Body”的孩子 然后选择名为“UpdateRequest”的孩子 然后选择名为“模特”的孩子 然后选择名为“instance”的孩子 然后选择名为“附件”的孩子 然后使用该子树。如何使用这个子树(并检查它是否存在)Python风格? 当我测试它

我正在使用suds,为了实现接收和发送附件(我已经这样做了),我需要使用“低级”suds对象。其中一个用于生成SOAP XML的对象具有以下结构(伪代码):

当我收到此对象时,我必须检查:

  • 其名称为“文件”
  • 然后选择名为“信封”的孩子
  • 然后选择名为“Body”的孩子
  • 然后选择名为“UpdateRequest”的孩子
  • 然后选择名为“模特”的孩子
  • 然后选择名为“instance”的孩子
  • 然后选择名为“附件”的孩子
然后使用该子树。如何使用这个子树(并检查它是否存在)Python风格? 当我测试它时,我使用了以下方法:

attachments_tree = soap_xml.children[0].children[1].children[0].children[0].children[1].children[21]
但我想要的是:

attachments_tree = soap_xml["document"]["Envelope"]["Body"]["UpdateRequest"]["model"]["instance"]["attachments"]
我相信改用字典是个坏主意。 尝试一步一步地调用子树,如下所示:

Envelopes = [child for child in soap_xml.children if child.name == 'Envelope']
Body = [child for child in Envelopes[0].children if child.name == 'Body']

它看起来也很糟糕,即使它能起作用。有好的pythonic解决方案吗?

丑陋的业务逻辑永远不会产生漂亮的代码。你做了你必须做的事情来处理你得到的东西。你可能应该使用XPATH来处理类似的事情。你看了命名元组了吗?没有,但我真的不明白这会有什么帮助,因为我描述的对象是我从SUD收到的,我必须解析。。。我猜它没有命名元组。
Envelopes = [child for child in soap_xml.children if child.name == 'Envelope']
Body = [child for child in Envelopes[0].children if child.name == 'Body']