Получите значение из ответа SOAP из нескольких xml — данных с помощью PHP

#php #xml #soap

Вопрос:

Это ответ на запрос soap.

 <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <GetConfigurationInfoResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://micros-hosting.com/EGateway/">
            <configInfoResponse>
                <OperationalResult>
                    <Success>true</Success>
                    <ErrorCode>Success</ErrorCode>
                    <ErrorMessage>Success</ErrorMessage>
                </OperationalResult>
                <ConfigInfoType>
                    <EConfigurationInfoType>MENUITEMDEFINITIONS</EConfigurationInfoType>
                </ConfigInfoType>
                **<MenuItemDefinitions>amp;<?xml version="1.0" encoding="utf-8"?amp;>amp;<?micros-type Micros.PosCore.DataStore.DbRecords.DbMenuItemDefinition[], PosCore, Version=2.5.0.0, Culture=neutral, PublicKeyToken=null?amp;>amp;<ArrayOfDbMenuItemDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"amp;>amp;<DbMenuItemDefinitionamp;>amp;<NameOptionsamp;>0000000amp;</NameOptionsamp;>amp;<MenuItemDefIDamp;>4055amp;</MenuItemDefIDamp;>amp;<HierStrucIDamp;>25amp;</HierStrucIDamp;>amp;<MenuItemMasterIDamp;>1570amp;</MenuItemMasterIDamp;>amp;<SequenceNumamp;>1amp;</SequenceNumamp;>amp;<Name1amp;>amp;<StringNumberIdamp;>8507amp;</StringNumberIdamp;>amp;<StringTextamp;>=Breakfast=amp;</StringTextamp;>amp;</Name1amp;>amp;<Name2amp;>amp;<StringNumberIdamp;>8508amp;</StringNumberIdamp;>amp;<StringText /amp;>amp;</Name2amp;>amp;<SluSortamp;>0amp;</SluSortamp;>amp;<NluNumberamp;>0amp;</NluNumberamp;>amp;<Tareamp;>0amp;</Tareamp;>amp;<Surchargeamp;>0amp;</Surchargeamp;>amp;<IconNumberamp;>0amp;</IconNumberamp;>amp;<OptionBitsamp;>00000000amp;</OptionBitsamp;>amp;<SpecialCountamp;>0amp;</SpecialCountamp;>amp;<PrepTimeamp;>0amp;</PrepTimeamp;>amp;<Name3amp;>amp;<StringNumberIdamp;>0amp;</StringNumberIdamp;>amp;<StringText /amp;>amp;</Name3amp;>amp;<LongDescriptoramp;>amp;<StringNumberIdamp;>0amp;</StringNumberIdamp;>amp;<StringText /amp;>amp;</LongDescriptoramp;>amp;<MenuItemClassObjNumamp;>0amp;</MenuItemClassObjNumamp;>amp;<NluGroupIndexamp;>0amp;</NluGroupIndexamp;>amp;<SluIndexamp;>0amp;</SluIndexamp;>amp;<HhtSluIndexamp;>0amp;</HhtSluIndexamp;>amp;<MainLevelsamp;>00000000amp;</MainLevelsamp;>amp;<SubLevelsamp;>00000000amp;</SubLevelsamp;>amp;<PosRefamp;>0amp;</PosRefamp;>amp;<PrintClassObjNumamp;>0amp;</PrintClassObjNumamp;>amp;<PrefixLevelOverrideamp;>0amp;</PrefixLevelOverrideamp;>amp;<GuestCountamp;>0amp;</GuestCountamp;>amp;<MenuLevelEntries /amp;>amp;<DefaultCondiments /amp;>amp;<NextScreen /amp;>amp;<MiMasterObjNumamp;>10010000amp;</MiMasterObjNumamp;>amp;<CheckAvailabilityamp;>falseamp;</CheckAvailabilityamp;>amp;<OutOfMenuItemamp;>falseamp;</OutOfMenuItemamp;>amp;</DbMenuItemDefinitionamp;>amp;<DbMenuItemDefinition;amp;</ArrayOfDbMenuItemDefinitionamp;></MenuItemDefinitions>**
                </configInfoResponse>
        </GetConfigurationInfoResponse>
    </soap:Body>
</soap:Envelope>
 

Как я могу извлечь из этого выгоду <MenuItemDefinitions></MenuItemDefinitions> ? Этот xml-элемент внутри других XML-данных. Как сказать об этом виде XML?

Как отфильтровать это значение с помощью PHP? Мне нужно только получить значение из внутреннего <MenuItemDefinitions></MenuItemDefinitions> значения xml.

Это php-код запроса soap.

 <?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://192.168.5.10:8080/EGateway/SimphonyPosApiWeb.asmx");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetConfigurationInfo>
      <vendorCode />
      <employeeObjectNum>10009</employeeObjectNum>
      <configurationInfoType>
        <int>1</int>
      </configurationInfoType>
      <revenueCenter>5</revenueCenter>
      <configInfoResponse />
    </GetConfigurationInfo>
  </soap:Body>
</soap:Envelope>");

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: text/xml;",
  "SOAPAction: http://192.168.5.10:8080/EGateway/GetConfigurationInfo"
));

$response = curl_exec($ch);

curl_close($ch);

var_dump($response); 
 

Комментарии:

1. В чем ваша проблема, выкапывание содержимого <MenuItemDefinitions> или осознание того, что оно тоже является XML-документом, и поэтому его необходимо рассматривать как таковой

2. @RiggsFolly Спасибо вам за ваш ответ. Моя проблема в том, что мне нужно преобразовать этот ответ <MenuItemDefinitions> в xml и получить значение из этого xml. Это <MenuItemDefinitions> внутри названия пунктов меню доступно, мне нужно получить это значение.

3. Так что покажите код, который читает этот xmlDoc, пожалуйста

4. Пожалуйста, внесите все это в вопрос, используя ссылку РЕДАКТИРОВАНИЯ под вопросом, никто не может прочитать код в комментарии

5. @RiggsFolly Я уже отредактировал вопрос.