从HTTP套接字响应中获取XML元素的值
问题描述:
我有一个控制器使用HTTP套接字发送请求,并以xml
格式给出响应。我正在使用cakephp 2.6。
这里是我的代码,以获得响应正文:从HTTP套接字响应中获取XML元素的值
$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"
答
可以使用CakePHP的XML类得到一个错误:CakePHP XML class
的原因代码不能被解析为XML,因为你有围绕它的pre>标签,我猜是因为你正在尝试调试($ something)。
在控制器的顶部包括XML类:
//First Load the Utility Class
App::uses('Xml', 'Utility');
控制器操作执行以下操作:
$this->autoRender = false;
pr(Xml::toArray(Xml::build($thexmlvariable)));
这样,你可以测试它,那么你应该使用Ajax布局(空白布局)。
答
好了,最后我跳到结论,我从Http响应得到的xml无效,由于'处理指令目标之前的空间' 我试着用另一个'虚拟文件响应'与有效的xml,它给了我我想要的。
你应该得到很多警告,解释什么是错的,而不仅仅是那个异常信息。 [**处理指令目标**之前的空间](http://stackoverflow.com/questions/14955789/solved-xml-cant-be-opened-in-a-browser)是不允许的。 – ndm 2015-02-10 07:10:16
是的,你是正确的,但不幸的是,我用于Http Socket的主机只给我这个回应,我没有授权编辑给出回应的文件 – Angelina 2015-02-10 07:17:56
那么,如果这真的是他们回来的,那么你应该告诉他们他们的API有问题,需要修复。 – ndm 2015-02-10 07:21:17