2015-02-10 88 views
0

我有一個控制器使用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" 
+0

你應該得到很多警告,解釋什麼是錯的,而不僅僅是那個異常信息。 [**處理指令目標**之前的空間](http://stackoverflow.com/questions/1495578​​9/solved-xml-cant-be-opened-in-a-browser)是不允許的。 – ndm 2015-02-10 07:10:16

+0

是的,你是正確的,但不幸的是,我用於Http Socket的主機只給我這個迴應,我沒有授權編輯給出迴應的文件 – Angelina 2015-02-10 07:17:56

+0

那麼,如果這真的是他們回來的,那麼你應該告訴他們他們的API有問題,需要修復。 – ndm 2015-02-10 07:21:17

回答

1

可以使用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佈局(空白布局)。

+0

感謝您的回答, 我已經嘗試過,但返回錯誤消息:「XML無法讀取」 – Angelina 2015-02-10 07:31:03

+0

您是否嘗試過簡單地在URL上使用file_get_contents?只要服務器返回有效的XML,那麼XML類應該能夠構建它並將其輸出爲數組 – Voycey 2015-02-10 07:36:23

1

好了,最後我跳到結論,我從Http響應得到的xml無效,由於'處理指令目標之前的空間' 我試着用另一個'虛擬文件響應'與有效的xml,它給了我我想要的。