列出使用Python SUDS进行SOAP枚举的所有可能值

我正在将SUDS客户端连接到SOAP服务器,其wsdl包含许多枚举,如下所示:

</simpleType>
  <simpleType name="FOOENUMERATION">
  <restriction base="xsd:string">
   <enumeration value="ALPHA"><!-- enum const = 0 -->
   <enumeration value="BETA"/><!-- enum const = 1 -->
   <enumeration value="GAMMA"/><!-- enum const = 2 -->
   <enumeration value="DELTA"/><!-- enum const = 3 -->
  </restriction>
</simpleType>

在我的客户中,我正在接收包含这些各种枚举类型的元素的序列.我需要给定一个成员变量,我需要知道所有可能的枚举值.基本上,我需要一个函数来获取这些枚举之一的实例,并返回所有可能值的字符串列表.

当我有一个实例时,运行:

print type(foo.enumInstance)

我得到:

<class 'suds.sax.text.Text'>

我不确定如何从中获取实际的simpleType名称,然后从本身无法解析WSDL的情况中获取可能的值.

编辑:我发现了一种获取指定simpleType名称的枚举的方法,如下所示,所以我的问题缩小到查找给定变量的类型名称,因为type(x)返回suds.sax.text.Text而不是本名

 for l in  client.factory.create('FOOENUMERATION'):
    print l[0]

解决方法:

如果知道所需的枚举的名称,则应该能够将suds给您的枚举对象当作字典,并使用该名称进行直接查找.例如,如果您的枚举类型称为SOAPIPMode,并且您希望该枚举中的枚举名为STATIC_MANUAL:

soapIPMode = client.factory.create('SOAPIPMode')
staticManual = soapIPMode['STATIC_MANUAL']

结果值是suds.sax.text.Text类型,其作用类似于字符串.

您也可以遍历枚举类型,就好像它是一个数组一样:

for i in range(len(soapIPMode):
    process(soapIPMode[i])
上一篇:java-静态valueOf()方法的意义是什么? (枚举)


下一篇:IEnumerable-如何对两个枚举器使用一种方法