Как разобрать xml с пространствами имен и специальными тегами - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь разобрать строку xml, но кажется, что это невозможно сделать правильно, файл xml:

<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>
<GetBookableApartmentsResponse xmlns="http://tempuri.org/">
<GetBookableApartmentsResult>
<xs:schema id="BookableApartments" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
   <xs:element name="BookableApartments" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
      <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Apartment">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element name="Name" type="xs:string" minOccurs="0"/>
                     <xs:element name="BookingUrl" type="xs:string" minOccurs="0"/>
                     <xs:element name="BookingUrlMobile" type="xs:string" minOccurs="0"/>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:choice>
      </xs:complexType>
   </xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
   <BookableApartments xmlns="">
      <Apartment diffgr:id="Apartment1" msdata:rowOrder="0">
         <Name>10419-0001</Name>
         <BookingUrl>http:/test.com</BookingUrl>
         <BookingUrlMobile></BookingUrlMobile>
      </Apartment>
      <Apartment diffgr:id="Apartment2" msdata:rowOrder="1">
         <Name>10419-0002</Name>
         <BookingUrl>http:test.com</BookingUrl>
         <BookingUrlMobile></BookingUrlMobile>
      </Apartment>

Я хочу получить данные от всех дочерних элементов BookableApartments или хочучтобы получить Apartment данных.

Я установил правильное пространство имен, которое я считаю:

$simpleXml = new \SimpleXmlElement($response);

$simpleXml->registerXPathNamespace('prefix', 'http://tempuri.org/');

$res = $simpleXml->xpath('//prefix:GetBookableApartmentsResponse');

$res = $res[0]->children('urn:schemas-microsoft-com:xml-diffgram-v1');

var_dump($res)exit;

, но все время получаю результат: SimpleXMLElement {#957}

Если бы кто-то мог объяснить мне, какполучить доступ к этим данным, какова логика, которой я должен следовать для доступа к этим данным?

Я знаю, что должен установить namesapce, но, как вы можете видеть из XML, у меня также есть специальный тег: <diffgr:diffgram любая помощь будет высоко оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...