【问题标题】:How can I return an XML file with Spyne?如何使用 Spyne 返回 XML 文件?
【发布时间】:2016-06-18 09:07:08
【问题描述】:

我有 Flask-Spyne 服务器(Web 服务),我想返回(在他询问后返回给客户端)一个 XML 文件

我想这样做:

  • 我会将一些东西从数据库放到 XML 中。 (已解决
  • 我将 XML 保存在服务器(Web 服务)上,我想在客户端询问时将其发送给客户端。 (这是个问题

有什么办法吗?

这是我的代码:

class Service(spyne.Service):
    __service_url_path__ = '/soap';
    __in_protocol__ = Soap11(validator='lxml');
    __out_protocol__ = Soap11();

    @spyne.srpc(DateTime, DateTime, _returns="What to put here?")
    def Function(A,B):
        GetXML(A,B)
        s = open("file.xml");
        return s;

if __name__ == '__main__':
    app.run(host = '127.0.0.1');

非常感谢您的任何帮助.. :)

编辑:

所以,现在这是我的代码:(发送字符串)

@spyne.srpc(DateTime, DateTime, _returns=Iterable(Unicode))
    def oracle(A,B):
        GetXML(A,B)
        s = open("file.xml");
        return s

【问题讨论】:

  • 你应该用正确的 mime 类型作为 'text/xml 正确地编写一个 http 响应,参考这个,stackoverflow.com/questions/11773348/…
  • @Sugam 谢谢,会试试
  • @Sugam 还有,我应该给 _returns 放什么?
  • 是的,xml 变量应该包含您的 xml 字符串
  • @Sugam 等等,我有点困惑...... :) 你能给我写一些代码吗(那个 def oracle 应该是什么样子)?

标签: python xml web-services return spyne


【解决方案1】:

如果要将其作为文档中的常规字符串返回,则必须将 _return 类型设置为 Unicode

如果要将其作为 xml 文档返回,则必须对其进行解析 (etree.parse("Databaze.xml")) 并返回生成的 ElementTree 实例。在这种情况下,您的返回类型应为 AnyXml

另见这些例子:

https://github.com/plq/spyne/blob/1f214d102913848cf9d18985d2d75ae1a97375de/examples/response_as_file_dynamic.py

https://github.com/plq/spyne/blob/1f214d102913848cf9d18985d2d75ae1a97375de/examples/response_as_xml_file.py

以字符串形式发送将您的文档与父上下文隔离开来。它的效率有点低(例如< 字符变为<),但在其他方面无害。

作为文档发送会使您的文档成为 SOAP 消息的一部分。它更高效,但它会从父文档继承命名空间前缀,这可能会导致文档发生细微的变化——即你输入的内容和返回的内容可能不逐字节相等(但仍然相等)。

这完全取决于用例。如有疑问,以字符串形式返回。

【讨论】:

  • 非常感谢:)。现在,我用字符串做到了。您能告诉我,发送字符串或 xml 文档是否有任何区别?在速度,可用性.. :)
  • 所以,如果我返回字符串并且现在对我有好处并且我很满意,那很好,我不必更改它:) 非常感谢
  • 抱歉再次打扰:) 但是如果我想用 AnyXml 发送 xml 文档,你能写信给我吗?我用字符串发送代码编辑了我的帖子。谢谢
  • 我已经回答了你的问题。如果你想要另一个答案,你需要问另一个问题。或者只是阅读文档,你知道的。
  • 好的,会的。。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多