Стратегия нормализации нескольких ответов SOAP - PullRequest
1 голос
/ 13 февраля 2010

Я в основном пытаюсь объединить несколько ответов SOAP, потому что веб-служба поддерживает поиск только одной комнаты за раз вместо нескольких , насколько я знаю - это метод CheckAvailability и использование этого WSDL

Если я предоставляю свои учетные данные, даты прибытия / отъезда в моем запросе SOAP, я получаю следующие данные, которые в основном скомпрометированы из 3 вещей. Типы номеров (тип номера и описание), тарифные планы (предложения) и номер Цены (карты номеров с планами / предложениями).

Допустим, пользователь указывает дату приезда 20 февраля и дату отъезда 24 февраля 2010 года, приезд / отъезд, но хотел бы забронировать 3 номера:

  • 1x номер с 3x взрослыми 2x детьми
  • 1x номер с 2x взрослыми 1x детьми
  • 1x номер с 1x взрослым 0 детьми

Так как у нас 3 комнаты, это должно быть 3 запроса, потому что количество людей различается, цены изменятся.

Моя главная задача состоит в том, чтобы объединить их так, чтобы я мог сначала отображать типы комнат на своей веб-странице, а в каждом блоке типов комнат отображать цену для каждой комнаты, которую хотел бы пользователь, например:

<li>
    <h2>King Suite</h2>
    <h3>Prices</h3>
    <ul class="tabs">
      <li>Room 1<table></table></li>
      <li>Room 2<table></table></li>
      <li>Room 3<table></table></li>
    </ul>
</li>

Пример ответа SOAP:

        <RoomStays>
            <RoomStay>
                <RoomTypes>
                    <RoomType RoomTypeCode="KING" NumberOfUnits="14">
                        <RoomDescription Name="Kings Room">
                            <Text>Content</Text>
                            <Image>http://static.images.com/file.gif</Image>
                        </RoomDescription>
                    </RoomType>
                </RoomTypes>
                <RatePlans>
                    <RatePlan RatePlanCode="SPECIAL" RatePlanName="Special Rate">
                        <RatePlanDescription Name="Published Rate">
                            <Text>Published Rate European Plan</Text>
                        </RatePlanDescription>
                        <Guarantee>
                            <GuaranteeDescription>
                                <Text>1 night room and tax due at the time of reservation</Text>
                            </GuaranteeDescription>
                        </Guarantee>
                        <CancelPenalties>
                            <CancelPenalty>
                                <PenaltyDescription>
                                    <Text>30 day cancellation policy</Text>
                                </PenaltyDescription>
                            </CancelPenalty>
                        </CancelPenalties>
                        <Commission>
                            <Percent>10</Percent>
                        </Commission>
                    </RatePlan>
                </RatePlans>
                <RoomRates>
                    <RoomRate RoomTypeCode="KING" RatePlanCode="SPECIAL">
                        <Rates>
                            <Rate>
                                <Base AmountBeforeTax="1145.00" AmountAfterTax="1145.00" CurrencyCode="USD" />
                                <Total AmountBeforeTax="5725.00" AmountAfterTax="5725.00" CurrencyCode="USD" />
                                <Taxes>
                                    <Tax Amount="0.00" CurrencyCode="USD" />
                                </Taxes>
                                <Tpa_Extensions>
                                    <NightlyRate Date="12/28/2010" Price="1145.00" Tax="0.00" Fee="0.00" PriceWithTaxAndFee="1145.00" />
                                    <NightlyRate Date="12/29/2010" Price="1145.00" Tax="0.00" Fee="0.00" PriceWithTaxAndFee="1145.00" />
                                    <NightlyRate Date="12/30/2010" Price="1145.00" Tax="0.00" Fee="0.00" PriceWithTaxAndFee="1145.00" />
                                    <NightlyRate Date="12/31/2010" Price="1145.00" Tax="0.00" Fee="0.00" PriceWithTaxAndFee="1145.00" />
                                    <NightlyRate Date="1/1/2011" Price="1145.00" Tax="0.00" Fee="0.00" PriceWithTaxAndFee="1145.00" />
                                </Tpa_Extensions>
                            </Rate>
                        </Rates>
                    </RoomRate>
                </RoomRates>
                <BasicPropertyInfo HotelCode="1" HotelName="My Hotel!" />
            </RoomStay>
        </RoomStays>

Итак, каким образом мне следует нормализовать эту разметку, чтобы объединить все 3 запроса, чтобы они могли отобразить указанную разметку HTML?

1 Ответ

1 голос
/ 25 июля 2010

Попробуйте это:

 $children = array();
 foreach ($filelist as $file)
 {
   $dom = new DOMDocument();
   $dom->load($file);
   $children[] = $dom->firstChild;
 }
 $output = new DOMDocument();
 $output->appendChild($root = $output->createElement("rootelement"));
 foreach ($children as $child)
 {
   $imported = $output->importNode($child, true);
   $root->appendChild($imported);
 }
 // $output contains a DOMDocument with your aggregate document
 $newxml = $output->saveXML(); // if you want your XML as a string

Используйте $ dom-> loadXML вместо $ dom-> load, если вы хотите загрузить строку, содержащую ваш XML вместо файла на диске.

Если у вас есть все в одном листинге XML или DOM, вы можете разделить их на части, повторяя (наихудший), XPath в PHP (лучше) или XSLT (лучший).

...