处理xsd的正确方法:使用zeep的任何响应

时间:2018-11-15 14:33:09

标签: python zeep

我正在使用zeep从SOAP服务中检索数据。在我的情况下,响应为xsd:any,而zeep不知道它是什么,因此它只返回lxml.elementexplanation on github

处理此案的最佳方法是什么?

这就是我现在要尝试的方式:

from io import StringIO
import xml.etree.ElementTree as ET

# define a couple of helpers

def strip_namespaces(xml):
    """
    parses raw xml and removes namespaces from tags. 
    """
    iterable = ET.iterparse(StringIO(xml))
    for _, el in iterable:
        if '}' in el.tag:
            el.tag = el.tag.split('}', 1)[1]  # strip all namespaces
    root = iterable.root
    return root

def element_to_dict(element):
    """converts lxml object into python dict"""
    return (element.tag, 
        dict(map(element_to_dict, element)) or element.text)

with client.settings(raw_response=True):  # ask zeep to don't parse response
    result = client.service.Method(argument)

el = strip_namespaces(result.text)  
_, response_dict = element_to_dict(el)
print(response_dict)

它可以工作(我想),但是看起来有点冗长和脆弱。 还有更“ pythonic”的方式吗?

0 个答案:

没有答案