将数据动态附加到我的XMLSOAPMessag

2024-10-04 07:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过发送xml请求来调用API,方法是执行如下字符串格式化:

data = '''<?xml version="1.0" encoding="utf-8"?>
             <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
         <SOAP-ENV:Body>
             <ns2:MultiAvailabilityRequest xmlns:m="http://www.derbysoft.com/doorway" Password="CoolJoe" Token="{token}" UserName="CoolJoe"> 
         <ns2:MultiAvailabilityCriteria NumberOfUnits="{units}">
         <ns2:StayDateRange CheckIn="2016-05-02" CheckOut="2016-05-04"/> 
         <ns2:GuestCounts>
           <ns2:GuestCount AdultCount="{adultcount}"/>
           </ns2:GuestCounts> 
         <ns2:HotelCodes>
           <ns2:HotelCode>{hotelcode}</ns2:HotelCode> 
         </ns2:HotelCodes>
         </ns2:MultiAvailabilityCriteria>
      </ns2::MultiAvailabilityRequest>
     </SOAP-ENV:Body>
     </SOAP-ENV:Envelope>'''.format(token=token, units=units, adultcount=adultcount, hotelcode=hotelcode)                                                                                                                                    

上面的代码运行良好,可以得到不同hotelcodes、token等的值,并显示基于它们的结果。你知道吗

但是,我还有一个不同的要求,即酒店代码可以大于1(2、3或更多)。所需的xml如下所示:

data = '''<?xml version="1.0" encoding="utf-8"?>
             <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
         <SOAP-ENV:Body>
             <ns2:MultiAvailabilityRequest xmlns:m="http://www.derbysoft.com/doorway" Password="CoolJoe" Token="{token}" UserName="CoolJoe"> 
         <ns2:MultiAvailabilityCriteria NumberOfUnits="{units}">
         <ns2:StayDateRange CheckIn="2016-05-02" CheckOut="2016-05-04"/> 
         <ns2:GuestCounts>
           <ns2:GuestCount AdultCount="{adultcount}"/>
           </ns2:GuestCounts> 
         <ns2:HotelCodes>
           <ns2:HotelCode>{hotelcode1}</ns2:HotelCode>
           <ns2:HotelCode>{hotelcode2}</ns2:HotelCode> 
           <ns2:HotelCode>{hotelcode3}</ns2:HotelCode>  
         </ns2:HotelCodes>
         </ns2:MultiAvailabilityCriteria>
      </ns2::MultiAvailabilityRequest>
     </SOAP-ENV:Body>
     </SOAP-ENV:Envelope>'''.format(token=token, units=units, adultcount=adultcount)

所以,我的问题是:如何检查是否存在两个或两个以上的酒店代码。从每个酒店代码的第二个xml中可以看到,这样的新行加起来:

<ns2:HotelCode>{hotelcode1}</ns2:HotelCode>

任何帮助都将不胜感激。谢谢。你知道吗


Tags: orgenvtokenhttpwwwxmlschemassoap
1条回答
网友
1楼 · 发布于 2024-10-04 07:33:16

基本上,您应该将流程分为两部分:

  1. 填写酒店代码(不管是一个还是多个):

    hotelcode_string =''.join(['<ns2:HotelCode>{hotelcode}</ns2:HotelCode>'.format(hotelcode=code) for code in set([item["hotelcode"] for item in hotelcode])])

  2. 将酒店代码部分放入xml中:

    data = '''.... <ns2:HotelCodes>{hotelcode_string}</ns2:HotelCodes> ...'''.format(token=token, units=units, adultcount=adultcount,hotelcode_string=hotelcode_string)

相关问题 更多 >