Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parsowanie odpowiedzi SOAP w PHP
Forum PHP.pl > Forum > XML, AJAX
scyhe
Witam, na wstępie zaznaczę że technologia SOAP, XML jest dla mnie nowością dlatego proszę o wyrozumiałość.

Napisałem sobie skrypt wywołujący metodę webserwisu. Dostaję w wyniku odpowiedź XML. Tą odpowiedź chciałbym zapisać do bazy danych aby potem inna aplikacja mogła ją sobie podejrzeć i przerobić. I tutaj pojawia się problem, bo nie potrafię dobrać się do elementów XML'a.

Oto przykładowa struktura dokumentu zapisanego w bazie. ( na razie dla testu zapisuje go w pliku xml na serwerze )

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  3. <SOAP-ENV:Body>
  4. <ns1:TEST xsi:type="ns1:TEST">
  5. <BOGUS>
  6. <time>1411967345</time>
  7. <status>1</status>
  8. </BOGUS>
  9. <BOGUS>
  10. <time>1411964888</time>
  11. <status>10</status>
  12. </BOGUS>
  13. <BOGUS>
  14. </ns1:TEST>
  15. </SOAP-ENV:Body>
  16. </SOAP-ENV:Envelope>


kod jakim usiłuje to wydobyć to :

  1.  
  2. $str = file_get_contents('test.xml');
  3. $obj = simplexml_load_string($str);
  4. foreach($obj->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('ns1')->BOGUS as $cos)
  5. {
  6. echo (string)$cos->status . "\n";
  7. }


W efekcie wykonania skryptu nie dostaje nic. Pusta strona.
Ktoś może mi pomóc dobrać się do elementów time, status z xml o takiej strukturze ?
Turson
Niepotrzebnie zapisujesz odpowiedź do xml, bo SoapClient ładnie zwraca tablicę obiektu.
scyhe
Tak, wiem, ale wygląda to następująco: Jedna aplikacja uzyskuje odpowiedź z webservice poprzez własnie SOAPClient i tą odpowiedź w formie XML jest zapisywana w całości do bazy. Inna maszyna i aplikacja odpytuje sobie ta baze co jakis czas i pobiera sobie tego XML , parsuje go i tam robi dalej swoje rzeczy z tymi danymi. ( Tak przynajmniej sobie to zaplanowałem smile.gif ) Nie wiem czy dobrze Cie zrozumialem, ale jak mam zapisać to co zwroci SOAPClient do bazy ? tak abym mogl to potem z poziomu innej aplikacji odebrac takze przez SOAPClient z bazy i obrobic ? Niestety jest to dla mnie nowosc i raczkuje dopiero w temacie.
Turson
Nie sparsuje się tego ot tak, bo to nie jest zwykły dokument XML.
http://stackoverflow.com/a/4195132/3668301
ew. http://stackoverflow.com/questions/1589263...object-or-array
irekk
A czemu by nie zrobić w pierwszej aplikacji soapowej webuslugi ktora by plula zapisanym w bazie sqlem? Wowczas w drugiej aplikacji normalnie moglbys uzywac soapclienta. W tym wypadku w pierwszej aplikacji trzeba by skopiowac wsdlke z zrodla i podmienic endpoint lub uzyc trybu non-wsdl. Ew przeksztalcic koperte po stronie pierwszej aplikacji, przed zapisaniem do bazy, na forme bardziej przyjazna - json, xml...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.