我认为这里还有更多内容,但看起来原始xml中的某些数据在我通过soap调用在simplexml元素中设置后对我来说是不可用的。
这是我从soap调用中获取的原始信息(使用soapUI检索),请特别注意e_mail元素。
<GetSubscriberData_ByDrupal_IdResult><![CDATA[
<SubscriberDataRoot>
<SubscriberData>
<city>MEDIA</city>
<state>PA</state>
<zip>19063-4112</zip>
<country>USA</country>
<phone>1231231244</phone>
<e_mail>some_email@somewhere.com</e_mail>
</SubscriberData>
</SubscriberDataRoot>]]>
</GetSubscriberData_ByDrupal_IdResult>
这是我从我的SoapClient调用中获得的var_dump后的SimpleXMLElement。
object(SimpleXMLElement)#26 (1) {
["SubscriberData"]=>
object(SimpleXMLElement)#33 (29) {
["city"]=>
string(5) "MEDIA"
["state"]=>
string(2) "PA"
["zip"]=>
string(10) "19063-4112"
["country"]=>
string(3) "USA"
["phone"]=>
string(10) "1231231234"
["e_mail"]=>
object(SimpleXMLElement)#36 (0) {
}
}
}
我可以按预期访问大多数数据,类似于$soap_data->SubscriberData->city
,但值得注意的是e_mail元素不能直接使用,而另一个SimpleXMLElement
。我尝试使用asXML
,__toString
进行迭代,转换为(string)
..
(例如......)
php> var_dump($acct->SubscriberData->e_mail);
object(SimpleXMLElement)#38 (0) {
}
php> var_dump($acct->SubscriberData->e_mail->asXML());
string(17) "<e_mail></e_mail>"
php> var_dump($acct->SubscriberData->e_mail->__toString());
string(0) ""
php> var_dump((string) $acct->SubscriberData->e_mail);
string(0) ""
但我不能像任何其他字符串值元素那样访问它。我希望能够像其他元素一样获得$email = $acct->SubscriberData->e_mail
之类的字符串值。提前谢谢。
答案 0 :(得分:0)
我不确定我是否可以在没有肥皂的情况下测试/重现您的对象结构,但如果我使用原始XML并尝试处理它,我将不得不单独处理CDATA块。
$GetSubscriberData_ByDrupal_IdResult = simplexml_load_string($xmlSource);
$SubscriberDataRoot = simplexml_load_string((string) $GetSubscriberData_ByDrupal_IdResult);
$email = (string) $SubscriberDataRoot->SubscriberData->e_mail;
echo $email; // assigned to var just for demonstration