我认为这里还有更多的原因,但是看起来原始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_ 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。提前谢谢。
发布于 2014-01-30 07:32:16
我不确定是否可以在没有soap的情况下测试/重现您的对象结构,但是如果我获取原始的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 demonstrationhttps://stackoverflow.com/questions/21444884
复制相似问题