访问simplexml元素中的simplexml元素

时间:2014-01-29 23:25:48

标签: php soap simplexml

我认为这里还有更多内容,但看起来原始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之类的字符串值。提前谢谢。

1 个答案:

答案 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