如何正确获取 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
有没有办法从我的 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