如何将CDATA标志传递到JSON ZEEP SOAP XML请求中

时间:2019-04-25 21:15:19

标签: json soap wsdl cdata zeep

我正在尝试使用Python库Zeep将CDATA标志传递给SOAP请求,但是Zeep忽略了具有CDATA的字段,因此搜索范围太广,返回的数据比我想要的大得多。不幸的是,以后再用熊猫子选择数据框是不可行的,否则一切都会好起来的。

该请求是针对SQL Server数据库的查询,我可以使用以下内容通过SOAP UI检索数据:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsc="some_domain.com">
   <soapenv:Header/>
   <soapenv:Body>
      <wsc:search>
         <arg0>
            <userName>user</userName>
            <password>pass</password>
            <criteria>
               <some_name>
                  <field_one>CS</field_one>
                  <date_field>>2019-04-22</date_field>
                  <![CDATA[<timestamp_field>>2019-04-22 00:00:00.000</timestamp_field>]]>
               </some_name>
            </criteria>
            <maxRows>5</maxRows>
         </arg0>
      </wsc:search>
   </soapenv:Body>
</soapenv:Envelope>

由于某种原因,日期字段可以正常工作,但时间戳要求使用CDATA,否则会出现错误。因此,我的问题是;我如何使用Zeep达到相同的目的?我认为这意味着我必须将CDATA标志传递到JSON中。

我已经阅读了SO,GitHub和Zeep文档,但是在任何地方都找不到将CDATA传递到Zeep或将CDATA标志传递到JSON(然后用于创建SOAP XML请求)的示例。

是否甚至可以将CDATA传递到JSON中?也许有人知道如何将我在上面显示的确切xml信封传递到Zeep(考虑到上面没有定义服务的WSDL URI)?

这里是完整的example script

示例WSDL schema

然后... XML request and response

基本上,我设置了服务,为请求创建形成JSON,并将其传递到arg0下。

from zeep import Client

import zeep
from zeep.transports import Transport

searchTerm = 'ns0:metaWsSearchRequest'
wsdl_url = 'some_url' 
XML_viewname = 'SOMENAME'

transport = Transport(timeout=600)
zeep_client = Client(wsdl=wsdl_url, transport=transport)

# I am looking for the correct way to structure this JSON request if I have to pass CDATA

find_criteria_filled = {
    'userName': user,
    'password': pwd,
    'sessionId': None,
    'criteria': {
        'SOMENAME': {
            '<![CDATA[some_column_name3]]>': '2019-04-22 00:00:00.000',
            'some_column_name1': 'CS'
        }
    },
    'maxRows': '1'
}

response = zeep_client.service.search(arg0=find_criteria_filled)

该请求最终省略了some_column_name3,因此搜索不正确。它不显示第22条记录,而是返回搜索“ some_column_name1”上的第一条记录:“ CS”,该记录的日期恰好为2019-04-25。

我没有运气尝试过这些组合:

'<![CDATA[some_column_name3]]>': '2019-04-22 00:00:00.000'

'![CDATA[some_column_name3]]': '2019-04-22 00:00:00.000'

'some_column_name3': '<![CDATA[2019-04-22 00:00:00.000]]>'

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案