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

How to properly get spyne polymorphic tagnames

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

在这种情况下,我的 class 层次结构如下所示:

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

class Car(Vehicle):
    ...

class Bike(Vehicle):
    ...

然后我按照这个问题的答案中的说明进行操作,因为他们的问题看起来很相似,让多态性起作用。

更改的重要代码行:

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

到目前为止,还不错。在我这样做之后,我得到了以下响应:

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

所以我的问题是:

我能否摆脱一般的 class 名称 Vehicle 作为标签名称并获取特定 class 的名称,例如Car 作为标签名称?

因此响应应该是这样的:

<Car>
    ...
</Car>

我在这个问题中看到了一些使用 `ctx.out_string" 和一些文本替换的方法:

我认为这对我来说可能很好,但如果在 API 中有一个我还没有找到的 "conventional" 方式,我更愿意了解它改用它。

这就是 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