如何正确获取spyne多态标记名

时间:2016-06-14 15:50:13

标签: python xml wsdl spyne

有没有办法从我的spyne类定义中获取特定的类标记名称?

鉴于这种情况,我的类层次结构如下所示:

# models.py
class Vehicle(ComplexModel):
    ...

class Car(Vehicle):
    ...

class Bike(Vehicle):
    ...

然后我按照这些问题的答案中的说明,导致他们的问题看似相似,以使多态性有效。

how to implement abstract model in spyne

How do you @rpc _returns polymorphic types in spyne?

已更改的重要代码行:

# start.py
application=Application(
    ...
    in_protocol=Soap11(...),
    out_protocol=Soap11(polymorphic=True)
)

到目前为止,这么好。在我这样做之后,我得到了以下回复:

<!-- Response.xml -->
...
<Vehicle xsi:type="Car">
    ...
</Vehicle>
...

所以我的问题是:

我可以删除通用类名Vehicle作为标记名称,并获取特定类的名称,例如而Car作为标记名称?

因此响应应该是这样的:

<Car>
    ...
</Car>

我已经看过`ctx.out_string&#34;在这个问题中有一些文字替换:

Remove the namespace from Spyne response variables

我认为可能对我来说很好,但是如果有一个&#34;传统&#34;在API中,我还没有找到它的方式,我宁愿知道使用它来代替它。

1 个答案:

答案 0 :(得分:0)

这就是XML多态性的工作原理。 libxml2的模式验证器(通过lxml使用)应该正确解释它。

OTOH,如果您确定只想通过标记名称进行区分,请查看<choice>标记:http://w3.org/TR/xmlschema-1/#declare-contentModel

另请参阅比较两种方法的文章:http://ibm.com/developerworks/library/ws-tip-xsdchoice

您似乎已经知道如何在Spyne中使用多态。以下是您使用<choice>代码的方式:https://github.com/arskom/spyne/blob/57ef5c0db51cb194353c67d317990fe89bc4177d/spyne/test/interface/test_xml_schema.py#L51