sanchez77 Posted March 11, 2012 Share Posted March 11, 2012 So I am accessing a web service and it returns a bunch of values, I am able to grab and print the first value, but I can't figure out how to print the second value. PHP Code that works <?php //Web service that works fine $client = new SoapClient("http://www.domain.com/sc001.asmx?WSDL"); $sc001 = $client->$NT(array('var1'=>$var1)); //Grab the value tag and print it from web service call and in this case prints 001 $tag = $sc001->NTResult->results->TaggedText->tag; echo $tag; ?> But how do I get it to print the second tag that equals 120? I've tried this <?php $tag2 = $sc001->NTResult->taggedResults->tag; ?> and this <?php $tag2 = $sc001->NTResult->taggedResults->TaggedText->tag; ?> and this <?php $tag2 = $sc001->NTResult->results->TaggedText->taggedResults->TaggedText->tag; ?> But neither work. The var_dump for is sc001 is: object(stdClass)#9 (1) { ["NTResult"]=> object(stdClass)#10 (2) { ["count"]=> int(1) ["results"]=> object(stdClass)#11 (1) { ["TaggedText"]=> object(stdClass)#12 (2) { ["tag"]=> string(3) "001" ["taggedResults"]=> object(stdClass)#13 (1) { ["TaggedText"]=> array(27) { [0]=> object(stdClass)#14 (2) { ["tag"]=> string(4) "120" ["textArray"]=> object(stdClass)#15 (1) { ["string"]=> array(2) { [0]=> string(28) "Rocks " [1]=> string(14) "Big Rocks" } } } } } } } } } } } and the XML return from the service is: <?xml version="1.0" encoding="utf-8" ?> - <TaggedTextArray xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.domain.com/sc001"> <count>1</count> - <results> - <TaggedText> <tag>001</tag> - <taggedResults> - <TaggedText> <tag>120</tag> - <textArray> <string>Rocks</string> <string>Big Rocks</string> </textArray> </TaggedText> Maybe the question is, how do you handle a SOAP returned array? I'm not sure, any help is appreciated. Thanks, sanchez Quote Link to comment https://forums.phpfreaks.com/topic/258681-soap-returned-values/ Share on other sites More sharing options...
Muddy_Funster Posted March 12, 2012 Share Posted March 12, 2012 Don't know if this will work, but you could try: $tag = array($sc001->NTResult->results->TaggedText->tag); foreach ($tag as $tagNum){ echo $tagNum; } Quote Link to comment https://forums.phpfreaks.com/topic/258681-soap-returned-values/#findComment-1326323 Share on other sites More sharing options...
sanchez77 Posted March 12, 2012 Author Share Posted March 12, 2012 Thanks but that didn't work. it's weird, I am able to capture the values in the first TaggedText section (tag=001), but I can't seem to get to the second set of Tagged Text, in particular tag=120. The XML return from the SOAP call is: - <TaggedTextArray xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.domain.com/sc001"> <count>1</count> - <results> - <TaggedText> <tag>001</tag> - <taggedResults> - <TaggedText> <tag>120</tag> - <textArray> <string>value1</string> <string>value2</string> </textArray> </TaggedText> </taggedResults> </TaggedText> </results> Any other ideas out there? Thanks, sanchez Quote Link to comment https://forums.phpfreaks.com/topic/258681-soap-returned-values/#findComment-1326491 Share on other sites More sharing options...
xyph Posted March 12, 2012 Share Posted March 12, 2012 I can't give you tested code, as I have no access to the SOAP server. If you can get the raw XML string, though (http://www.php.net/manual/en/soapclient.getlastresponse.php) you can use SimpleXML to easily parse the results. From what I've tried though, it appears your SOAP call isn't returning valid XML. <?php $xml_data = '<?xml version="1.0" encoding="utf-8" ?> <TaggedTextArray xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.domain.com/sc001"> <count>1</count> <results> <TaggedText> <tag>001</tag> <taggedResults> <TaggedText> <tag>120</tag> <textArray> <string>value1</string> <string>value2</string> </textArray> </TaggedText> </taggedResults> </TaggedText> </results>'; try { $xml = new SimpleXMLElement( $xml_data, LIBXML_NSCLEAN ); print_r( $xml ); } catch (Exception $e) { echo 'Caught exception: '.$e->getMessage(); } ?> Returns a bunch of errors about the XML data, and throws an exception. This can be fixed by removing the first three lines, but it's kinda 'hackish' <?php $xml_data = '<?xml version="1.0" encoding="utf-8" ?> <TaggedTextArray xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.domain.com/sc001"> <count>1</count> <results> <TaggedText> <tag>001</tag> <taggedResults> <TaggedText> <tag>120</tag> <textArray> <string>value1</string> <string>value2</string> </textArray> </TaggedText> </taggedResults> </TaggedText> </results>'; try { $xml_data = explode( "\n", $xml_data ); $xml_data = array_slice( $xml_data, 3 ); $xml_data = implode( '', $xml_data ); $xml = new SimpleXMLElement( $xml_data, LIBXML_NSCLEAN ); print_r( $xml ); foreach( $xml->TaggedText->taggedResults->TaggedText->textArray->string as $string ) { echo '<br><b>'.$string.'</b>'; } } catch (Exception $e) { echo 'Caught exception: '.$e->getMessage(); } ?> Returns SimpleXMLElement Object ( [TaggedText] => SimpleXMLElement Object ( [tag] => 001 [taggedResults] => SimpleXMLElement Object ( [TaggedText] => SimpleXMLElement Object ( [tag] => 120 [textArray] => SimpleXMLElement Object ( [string] => Array ( [0] => value1 [1] => value2 ) ) ) ) ) ) <br><b>value1</b><br><b>value2</b> Quote Link to comment https://forums.phpfreaks.com/topic/258681-soap-returned-values/#findComment-1326540 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.