How to parse SOAP response without SoapClient

I spent the last few days trying to parse the SOAP response, but I can't get it to work. I would like to be able to get all the oproduct objects.

EDIT: I do it this way, instead of using the built-in SOAP client, because I need to execute concurrent requests using multi_curl.

Here is my code:

$xml = simplexml_load_string($response);
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
foreach ($xml->xpath('//oproduct') as $item)
{
  // do something
}

Here is the answer:

<soap-env:envelope xmlns:ns1="http://v3.core.com.productserve.com/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:body>
    <ns1:getproductlistresponse>
      <oproduct>
        <iid>113133802</iid>
        <icategoryid>270</icategoryid>
        <imerchantid>1547</imerchantid>
        <iadult>0</iadult>
        <sname>The Ashes / 5th Test - England v Australia - Day 1</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=113133802&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/1547/113133802.jpg</sawthumburl>
        <fprice>119.99</fprice>
      </oproduct>
      <oproduct>
        <iid>113133791</iid>
        <icategoryid>270</icategoryid>
        <imerchantid>1547</imerchantid>
        <iadult>0</iadult>
        <sname>The Ashes / 1st Test - England v Australia - Day 1</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=113133791&amp;a=111402&amp;m=1547&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/1547/113133791.jpg</sawthumburl>
        <fprice>69.99</fprice>
      </oproduct>
      <oproduct>
        <iid>51155349</iid>
        <icategoryid>428</icategoryid>
        <imerchantid>513</imerchantid>
        <iadult>0</iadult>
        <sname>Rapitest DTM 118 Damp Test Meter</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=51155349&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/513/51155349.jpg</sawthumburl>
        <fprice>18.35</fprice>
      </oproduct>
      <oproduct>
        <iid>187948</iid>
        <icategoryid>474</icategoryid>
        <imerchantid>496</imerchantid>
        <iadult>0</iadult>
        <sname>Rapitest Dm 10 Electrical Multimeter</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=187948&amp;a=111402&amp;m=496&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/496/187948.jpg</sawthumburl>
        <fprice>26.71</fprice>
      </oproduct>
      <oproduct>
        <iid>51155353</iid>
        <icategoryid>428</icategoryid>
        <imerchantid>513</imerchantid>
        <iadult>0</iadult>
        <sname>Rapitest DM 10 Electrical Multimeter</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=51155353&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/513/51155353.jpg</sawthumburl>
        <fprice>22.7</fprice>
      </oproduct>
      <oproduct>
        <iid>49152850</iid>
        <icategoryid>474</icategoryid>
        <imerchantid>1366</imerchantid>
        <iadult>0</iadult>
        <sname>Testboy Profi LED Plus</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=49152850&amp;a=111402&amp;m=1366&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/1366/49152850.jpg</sawthumburl>
        <fprice>44.99</fprice>
      </oproduct>
      <oproduct>
        <iid>51155350</iid>
        <icategoryid>428</icategoryid>
        <imerchantid>513</imerchantid>
        <iadult>0</iadult>
        <sname>Rapitest ETP 116 Electrical Test Probe</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=51155350&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/513/51155350.jpg</sawthumburl>
        <fprice>17.55</fprice>
      </oproduct>
      <oproduct>
        <iid>51155351</iid>
        <icategoryid>428</icategoryid>
        <imerchantid>513</imerchantid>
        <iadult>0</iadult>
        <sname>Rapitest ET 111 Electrical Test Meter</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=51155351&amp;a=111402&amp;m=513&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/513/51155351.jpg</sawthumburl>
        <fprice>13.55</fprice>
      </oproduct>
      <oproduct>
        <iid>72326941</iid>
        <icategoryid>474</icategoryid>
        <imerchantid>496</imerchantid>
        <iadult>0</iadult>
        <sname>Rapitest Etp 116 Electrical Test Probe</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=72326941&amp;a=111402&amp;m=496&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/496/72326941.jpg</sawthumburl>
        <fprice>20.66</fprice>
      </oproduct>
      <oproduct>
        <iid>49338340</iid>
        <icategoryid>206</icategoryid>
        <imerchantid>80</imerchantid>
        <iadult>0</iadult>
        <sname>Ladies Protest Zekke Jacket True Black</sname>
        <sawdeeplink>http://www.awin1.com/pclick.php?p=49338340&amp;a=111402&amp;m=80&amp;platform=cs</sawdeeplink>
        <sawthumburl>http://images.productserve.com/thumb/80/49338340.jpg</sawthumburl>
        <fprice>54.99</fprice>
      </oproduct>
      <itotalcount>6350</itotalcount>
    </ns1:getproductlistresponse>
  </soap-env:body>
</soap-env:envelope>
+5
source share
2 answers

Could you clarify which version of PHP you are using (4 or 5)? There is also a special reason why you do not want / cannot use the PHP 5 SOAP extension? Knowing this information should help us give you a better answer.

, , , oproduct. node SOAP, oproduct "http://v3.core.com.productserve.com/". XPath. , :

$xml = simplexml_load_string($response);
$xml->registerXPathNamespace('ns', 'http://v3.core.com.productserve.com/');
foreach ($xml->xpath('//ns:oproduct') as $item)
{
  // do something
}

, .

. , , , , :

$xml = simplexml_load_string($response);
$xml->registerXPathNamespace('soapenv', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('ns', 'http://v3.core.com.productserve.com/');
foreach ($xml->xpath('/soapenv:envelope/soapenv:body/ns:getproductlistresponse/ns:oproduct') as $item)
    {
      // do something
    }

, node -Env: body oproduct . , .

: , . :

$xml = simplexml_load_string($response);
$ns = $xml->getNamespaces(true);
$soap = $xml->children($ns['soap-env']);
$getproductlistresponse = $soap->body->children($ns['ns1']);
foreach ($getproductlistresponse->children() as $item)
{
  //This example just accesses the iid node but the others are all available.
  echo (string) $item->iid . '<br />';
}

, . XPath, XPath. , - XPath?

+3

PHP SOAP, , XML SOAP. . : http://php.net/manual/en/book.soap.php

: , SOAP- PHP, .

+5

All Articles