这是我通过SOAPUI查看的SOAP对象:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetPatientsResponse xmlns="http://interface.sitename.com/api">
<GetPatientsResult><![CDATA[<GetPatients FacilityId="test" ActiveOnly="True" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><PatientList><Patient>
<Id>1b518b28-4781-40a0-8358-a4f801178885</Id>
<LastName>Test123</LastName>
<NickName xsi:nil="true" />
<Gender>F</Gender>
<Physician xsi:nil="true" />
<IsActive>true</IsActive>
<ArrivalDate>2015-08-18T00:00:00</ArrivalDate>
<DepartureDate>2035-08-18T00:00:00</DepartureDate>
<MedCartId>00000000-0000-0000-0000-000000000000</MedCartId>
<TreatmentCartId>00000000-0000-0000-0000-000000000000</TreatmentCartId>
<PictureUrl>https://interface.quickmar.com/beta/image_gen/pat1b518b28-4781-40a0-8358-a4f801178885.png</PictureUrl>
<DOB>1900-01-01T00:00:00</DOB>
<SSNLastDigits xsi:nil="true" />
<FacilityPatientId xsi:nil="true" />
<PharmacyPatientId xsi:nil="true" />
<IsAssessmentNeeded>false</IsAssessmentNeeded>
<IsRedFlagged>false</IsRedFlagged>
</Patient>
<Patient>
<Id>642e39bc-d9e0-48e7-9c43-a4f801254b1e</Id>
<FirstName>Allie</FirstName>
<LastName>Assisted</LastName>
<RoomNumber>302</RoomNumber>
<NickName />
<Gender>F</Gender>
<Physician>Frank Jones</Physician>
<IsActive>true</IsActive>
<ArrivalDate>1999-12-15T00:00:00</ArrivalDate>
<DepartureDate>2035-08-18T00:00:00</DepartureDate>
<MedCartId>00000000-0000-0000-0000-000000000000</MedCartId>
<TreatmentCartId>00000000-0000-0000-0000-000000000000</TreatmentCartId>
<PictureUrl>https://interface.quickmar.com/beta/image_gen/pat642e39bc-d9e0-48e7-9c43-a4f801254b1e.png</PictureUrl>
<DOB>1965-12-19T00:00:00</DOB>
<SSNLastDigits>a1772</SSNLastDigits>
<FacilityPatientId>1005</FacilityPatientId>
<PharmacyPatientId xsi:nil="true" />
<IsAssessmentNeeded>false</IsAssessmentNeeded>
<IsRedFlagged>false</IsRedFlagged>
</Patient>
<Patient>
<Id>98f0e2de-d165-4643-9c11-a4e900eb5818</Id>
<FirstName>Charlie</FirstName>
<LastName>Jones</LastName>
<RoomNumber>101</RoomNumber>
<NickName>Mr. Charlie</NickName>
<Gender>M</Gender>
<Allergies />
<Diagnoses />
<Physician />
<IsActive>true</IsActive>
<ArrivalDate>2011-04-04T00:00:00</ArrivalDate>
<DepartureDate>2035-08-03T00:00:00</DepartureDate>
<MedCartId>00000000-0000-0000-0000-000000000000</MedCartId>
<TreatmentCartId>00000000-0000-0000-0000-000000000000</TreatmentCartId>
<PictureUrl>https://interface.quickmar.com/beta/image_gen/pat98f0e2de-d165-4643-9c11-a4e900eb5818.png</PictureUrl>
<DOB>1971-10-31T00:00:00</DOB>
<SSNLastDigits xsi:nil="true" />
<FacilityPatientId xsi:nil="true" />
<PharmacyPatientId xsi:nil="true" />
<IsAssessmentNeeded>false</IsAssessmentNeeded>
<Diet />
<IsRedFlagged>false</IsRedFlagged>
</Patient></PatientList></GetPatients>]]></GetPatientsResult>
</GetPatientsResponse>
</soap:Body>
</soap:Envelope>
My PHP Code:
$soapClient = new SoapClient('http://remoteapi.asmx?wsdl');
$params = array('facilityId' => 'test',
'authId' => 'biglongauthcode',
'activeOnly' => true);
$response = $soapClient->GetPatients($params);
如果我执行:
var_dump($response);
我:
object(stdClass)#2 (1) { ["GetPatientsResult"]=> string(2944) " 1b518b28-4781-40a0-8358-a4f801178885 Test123 F true 2015-08-18T00:00:00 2035-08-18T00:00:00
00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000 https://interface.api.com/beta/image_gen/pat1b518b28-4781-40a0-8358-a4f801178885.png
1900-01-01T00:00:00 false false 642e39bc-d9e0-48e7-9c43-a4f801254b1e Allie Assisted 302 F Frank Jones true 1999-12-15T00:00:00 2035-08-18T00:00:00 00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000 https://interface.api.com/beta/image_gen/pat642e39bc-d9e0-48e7-9c43-a4f801254b1e.png 1965-12-19T00:00:00 a1772 1005 false false 98f0e2de-
d165-4643-9c11-a4e900eb5818 Charlie Jones 101 Mr. Charlie M true 2011-04-04T00:00:00 2035-08-03T00:00:00 00000000-0000-0000-0000-000000000000 00000000-0000-0000-0000-000000000000
https://interface.api.com/beta/image_gen/pat98f0e2de-d165-4643-9c11-a4e900eb5818.png 1971-10-02T00:00:00 false false " }
我还运行了以下代码:
foreach ($response as $key => $value) {
$xml = htmlentities($value);
}
echo "<pre>".$xml;
这只迭代一次,因为整个数据集都在一个数组值中。上面的输出是:
<GetPatients FacilityId="test" ActiveOnly="True" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><PatientList><Patient>
<Id>1b518b28-4781-40a0-8358-a4f801178885</Id>
<LastName>Test123</LastName>
<NickName xsi:nil="true" />
<Gender>F</Gender>
<Physician xsi:nil="true" />
<IsActive>true</IsActive>
<ArrivalDate>2015-08-18T00:00:00</ArrivalDate>
<DepartureDate>2035-08-18T00:00:00</DepartureDate>
<MedCartId>00000000-0000-0000-0000-000000000000</MedCartId>
<TreatmentCartId>00000000-0000-0000-0000-000000000000</TreatmentCartId>
<PictureUrl>https://interface.api.com/beta/image_gen/pat1b518b28-4781-40a0-8358-a4f801178885.png</PictureUrl>
<DOB>1900-01-01T00:00:00</DOB>
<SSNLastDigits xsi:nil="true" />
<FacilityPatientId xsi:nil="true" />
<PharmacyPatientId xsi:nil="true" />
<IsAssessmentNeeded>false</IsAssessmentNeeded>
<IsRedFlagged>false</IsRedFlagged>
</Patient>
<Patient>
<Id>642e39bc-d9e0-48e7-9c43-a4f801254b1e</Id>
<FirstName>Allie</FirstName>
<LastName>Assisted</LastName>
<RoomNumber>302</RoomNumber>
<NickName />
<Gender>F</Gender>
<Physician>Frank Jones</Physician>
<IsActive>true</IsActive>
<ArrivalDate>1999-12-15T00:00:00</ArrivalDate>
<DepartureDate>2035-08-18T00:00:00</DepartureDate>
<MedCartId>00000000-0000-0000-0000-000000000000</MedCartId>
<TreatmentCartId>00000000-0000-0000-0000-000000000000</TreatmentCartId>
<PictureUrl>https://interface.api.com/beta/image_gen/pat642e39bc-d9e0-48e7-9c43-a4f801254b1e.png</PictureUrl>
<DOB>1965-12-19T00:00:00</DOB>
<SSNLastDigits>a1772</SSNLastDigits>
<FacilityPatientId>1005</FacilityPatientId>
<PharmacyPatientId xsi:nil="true" />
<IsAssessmentNeeded>false</IsAssessmentNeeded>
<IsRedFlagged>false</IsRedFlagged>
</Patient>
<Patient>
<Id>98f0e2de-d165-4643-9c11-a4e900eb5818</Id>
<FirstName>Charlie</FirstName>
<LastName>Jones</LastName>
<RoomNumber>101</RoomNumber>
<NickName>Mr. Charlie</NickName>
<Gender>M</Gender>
<Allergies />
<Diagnoses />
<Physician />
<IsActive>true</IsActive>
<ArrivalDate>2011-04-04T00:00:00</ArrivalDate>
<DepartureDate>2035-08-03T00:00:00</DepartureDate>
<MedCartId>00000000-0000-0000-0000-000000000000</MedCartId>
<TreatmentCartId>00000000-0000-0000-0000-000000000000</TreatmentCartId>
<PictureUrl>https://interface.quickmar.com/beta/image_gen/pat98f0e2de-d165-4643-9c11-a4e900eb5818.png</PictureUrl>
<DOB>1971-10-02T00:00:00</DOB>
<SSNLastDigits xsi:nil="true" />
<FacilityPatientId xsi:nil="true" />
<PharmacyPatientId xsi:nil="true" />
<IsAssessmentNeeded>false</IsAssessmentNeeded>
<Diet />
<IsRedFlagged>false</IsRedFlagged>
</Patient></PatientList></GetPatients>
问题是我不确定我做错了什么。我想操作$response对象通过使用代码,如:
$lname = $response->Patient->Id
或者无论组合是什么,我已经在这里呆了很多小时了,现在没有任何工作,我意识到一旦我把$response对象正确地分解成键值对,我就会回去搞乱操作数据的方法,但现在它就像一个巨大的字符串,我不能从中得到任何东西。
任何帮助都会很感激。我已经搜索了几个小时,没有看到任何人有这个问题,所有的数据都在一个单一的数组值
我希望这能帮助别人在未来,但这是解决方案:
您要替换:
foreach ($response as $key => $value) {
$xml = htmlentities($value);
}
:
foreach ($response as $key => $value) {
$xml = html_entity_decode($value);
这将删除所有的html标记,并留下一个干净的XML文件。要能够解析文件,使用simpleXML,如下所示:
$residents = simplexml_load_string($xml);
现在可以像访问数组一样访问数据了。例如,如果我想打印第一个病人的Id属性的值,我只需使用下面这行代码:
echo "First Resident ID: ".$residents->PatientList->Patient[0]->Id;