如何在 Python 中使用 Spyne 从两个不同元素读取具有相同名称的 Xml 属性

问题描述

我是 Python 新手。我正在尝试使用 Python(版本 3.9.6)和 spyne-2.13.16 的第一个 SOAP 服务。在此服务中,我所做的只是读取 xml 负载并在 Json 中将其打印为输出

我不确定如何从具有相同名称的 SOAP 请求中的两个不同元素读取 xml 属性。我在下面附上了我的请求负载和响应负载

我有两个元素“generation_time”和“expiration_time”。它们都具有相同的属性“时间戳”。我在输出中看到代码打印了 expire_time 的时间戳属性的值。有没有办法可以控制需要打印哪个?

这是我的项目结构:

mypythonWS | |- 应用程序(模块) |- app.py |- 模型.py |

代码

app.py

​​>
from spyne import Application,rpc,ServiceBase
from spyne.protocol.json import JsonDocument
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
import model

class MyPythonService(ServiceBase):
    @rpc(model.Root,_returns=model.Root)
    def getConfiguration(ctx,root):
        return root

application = Application([MyPythonService],'mypython.type.service',in_protocol=Soap11(),out_protocol=JsonDocument())

wsgi_app = WsgiApplication(application)

if __name__ == '__main__':
    import logging
    from wsgiref.simple_server import make_server

    logging.basicConfig(level=logging.INFO)
    logging.getLogger('spyne.protocol.xml').setLevel(logging.INFO)

    logging.info("listening to http://127.0.0.1:8000")
    logging.info("wsdl is at: http://localhost:8000/?wsdl")

    server = make_server('0.0.0.0',8000,wsgi_app)
    server.serve_forever()

model.py

​​>
class MetaType(ComplexModel):
    __type_name__ = 'MetaType'
    _type_info = {
        'generation_time': Unicode,'microtime': XmlAttribute(Unicode),'timestamp': XmlAttribute(Unicode),'expiration_time': Unicode
    }
    
class Root (ComplexModel):
    __type_name__ = 'root'
    _type_info = {
        'Meta': MetaType
    }

请求:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <getConfiguration>
            <root>
                <Meta>
                    <generation_time microtime="1623853142.0784710" timestamp="1623853142">06/16/2021 2:19:02 PM UTC</generation_time>
                    <expiration_time timestamp="1635085143">10/24/2021 2:19:02 PM UTC</expiration_time>
                </Meta>
            </root>
        </getConfiguration>
    </soap:Body>
</soap:Envelope>

回复

{ 
    "Meta": {
        "generation_time": "06/16/2021 2:19:02 PM UTC","microtime": "1623853142.0784710","timestamp": "1635085143","expiration_time": "10/24/2021 2:19:02 PM UTC"
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)