0

Hello all,

I am trying to build a client to consume a webservice, and have run into some strange issues. Here is my code:

$securityCode = "A7D5B7D8-73E2-44D2-A6F8-4ACFB91843BF"; // The security code has been changed to an invalid code to prevent unwanted "visitors".
$ProphecyConnect = new SoapClient("http://test.prophecyhealth.com/ProphecyConnect/ProphecyConnectXML.cfc?wsdl");

try
{
    $params = array(SecurityCode => $securityCode, AssessmentID => -1, AssessmentType => "Test");
    $assessmentList = $ProphecyConnect->__soapCall("GetAssessments", array($params));
}
catch(Exception $exception)
{
    var_dump($exception);
}

$xml = new DOMDocument();
$xml->loadXML( $assessmentList );

try
{
    foreach($xml->getElementsByTagName("assessment") as $assessment)
    {
        foreach($assessment->childNodes as $node)
        {
            printf(
            "Name: %s - Type: %s - Value: %s\n",
            $node->nodeName,
            $node->nodeType,
            urlencode($node->nodeValue)     
            );
        }
    }
}
catch(Exception $ex)
{
    echo "Something happened.";
    var_dump($ex);
}

My problem is that the getElementByTagName never finds anything. This is the returned XML from the webservice:

<object>
    <success>true</success>
    <count>3</count>
    <assessments>
        <assessment>
            <assessmentid><![CDATA[201]]></assessmentid>
            <assessmentname><![CDATA[Cardiac Cath Lab V1]]></assessmentname>
            <assessmenttype><![CDATA[Test]]></assessmenttype>
            <costpoints><![CDATA[1]]></costpoints>
            <numberofquestions><![CDATA[23]]></numberofquestions>
            <timelimit><![CDATA[1380]]></timelimit>
        </assessment>
        <assessment>
            <assessmentid><![CDATA[695]]></assessmentid>
            <assessmentname><![CDATA[Cardiac Progressive Care Exam A V1]]></assessmentname>
            <assessmenttype><![CDATA[Test]]></assessmenttype>
            <costpoints><![CDATA[1]]></costpoints>
            <numberofquestions><![CDATA[75]]></numberofquestions>
            <timelimit><![CDATA[4500]]></timelimit>
        </assessment>
        <assessment>
            <assessmentid><![CDATA[708]]></assessmentid>
            <assessmentname><![CDATA[Cardiac Progressive Care Exam B V1]]></assessmentname>
            <assessmenttype><![CDATA[Test]]></assessmenttype>
            <costpoints><![CDATA[1]]></costpoints>
            <numberofquestions><![CDATA[75]]></numberofquestions>
            <timelimit><![CDATA[4500]]></timelimit>
        </assessment>
    </assessments>
</object>

I'm quite the n00b when it comes to PHP, but as far as I can tell, this looks right (at least close). I'm sure I'm missing something blatently obvious though.

Thanks

Edited by cmhampton

2
Contributors
6
Replies
28
Views
4 Years
Discussion Span
Last Post by cmhampton
0

I think, yes. Basically, I have no way of knowing if it is actually getting the results. I know the service returns them correctly (it's been tested in 3 other languages), so the disconnect must be somewhere in the parsing. If I use:

$soapURL = "http://test.prophecyhealth.com/ProphecyConnect/ProphecyConnectXML.cfc?method=GetAssessments&SecurityCode=A7D5B7D8-73E2-44D2-A6F8-4ACFB91843BF&AssessmentID=-1&AssessmentType=Test";
$assessmentList = file_get_contents($soapURL);
echo $assessmentList;

it will actually dump the correct return content. But I still cannot parse it this way. I have the same problem when get to the $xml->getElementsByTagName("assessment") part.

0

I get call.stdClass Object ( [GetAssessmentsReturn] => true101 ) which looks right (the actual call returns 101 assessment records).

1

stdClass Object means it's an object, and not an XML string. Probably one of it's properties is. So you'll have to change this:

$xml->loadXML( $assessmentList->ThePropertyThatHoldsTheXml );
0

Fantastic! That worked perfectly.

$xml->loadXML($assessmentList->GetAssessmentsReturn);

Thank you!!

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.