有没有办法从我的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中,我还没有找到它的方式,我宁愿知道使用它来代替它。
答案 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