2016-04-30 7 views
0

に私はこのような書式設定文字列を実行して、XML要求を送信することにより、APIを呼び出しています:追加データを動的に私のxml SOAPメッセージ

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の値を取得しています、トークンなどを表示し、それらに基づいて結果を表示します。

しかし、私はホテルコードが1以上(2,3以上)になる可能性があるもう1つの要件があります。そして、必要な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) 

、私の質問は:どのように私は2つのhotelcodesが存在しているか、二つ以上かどうかをチェックします。あなたは各ホテルコードする第二のxmlからわかるように、このような新しいラインアップ追加:

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

任意の助けをいただければ幸いです。ありがとう。

答えて

1

基本的には2つの部分でプロセスを分割する必要があります。ホテルのコードで

  1. は塗りつぶし(それは、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)

+0

適切なコーディング形式で回答を編集できますか。ポイント1は、すべてが1行に表示されているため、少し混乱しています... –

+0

申し訳ありません、何らかの理由で私のブラウザはこれを正しくフォーマットしません。それがもう少し目に見えることを願っています。 – lesingerouge

+0

ありがとうございました..今はっきりしています...ちょうど知りたいのですが、hotelcodes = set(hotel_codes)をポイント1で使用しています。説明のようですか? –

関連する問題