从HTTP套接字响应中获取XML元素的值

时间:2015-02-10 06:48:42

标签: xml sockets cakephp httprequest

我有一个使用HTTP套接字发送请求的控制器,并以xml格式提供响应。我正在使用cakephp 2.6 以下是获取响应正文的代码:

    $HttpSocket = new HttpSocket();            
    $response = $HttpSocket->request($request);
    $resulthit = $response->body;

当我尝试打印响应正文时,它会在我的浏览器中返回:

-2201502101153512eFXcByWLUHvQmYC0EHMn2JVxcpyzozBcek uid dan pwd

但是当我看到页面的来源时,这就是我所看到的:

<? xml version="1.0" ?>
  <PUSH>
   <STATUS>-2</STATUS>
   <SMSCMESSAGEID>20150210133953</SMSCMESSAGEID>
   <GUID>knDlIBuUZf6zixlhbbxxLoxhEUGZTWPD</GUID>
   <MSG>cek uid dan pwd</MSG>
  </PUSH>

我如何获得上面的XML元素的价值?
我想要STATUS和GUID。

我已经尝试过了:

$xml = new SimpleXMLElement($resulthit);

但我只收到错误的回复

 "String could not be parsed as XML"

2 个答案:

答案 0 :(得分:1)

您可以使用CakePHP Xml类:CakePHP XML class

代码无法解析为XML的原因是因为你有&lt;前&gt;围绕它的标签,我猜是因为你正在尝试调试($ something)。

在控制器的顶部包含XML类:

//First Load the Utility Class
App::uses('Xml', 'Utility');
控制器操作中的

执行以下操作:

$this->autoRender = false;
pr(Xml::toArray(Xml::build($thexmlvariable)));

这样你可以测试它然后你应该使用ajax布局(空白布局)。

答案 1 :(得分:1)

最后,我得出结论,在处理指令目标之前,我从Http响应得到的xml无效,因为“空格”。 我尝试过另一个虚拟文件响应&#39;有效的xml,它给了我想要的东西。