在使用web service時,當我們使用SOAP作為傳輸協定時,我們會收到一個XML格式的回傳結果。有時候,我們需要將這個XML資料轉換成數組,以便我們更方便地使用這些資料。在PHP中,這種轉換是非常簡單的,我們可以使用PHP的內建函數來完成。
一、SOAP回傳值的XML格式範例
在使用web service時,我們一般會透過SOAP協定發送請求,並且得到一個XML格式的回傳結果。 XML格式的回傳結果可能會很複雜,但我們可以透過一些範例來理解它。以下是一個簡單的SOAP回傳值的XML格式範例:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/webservice.php"> <SOAP-ENV:Body> <ns1:response> <ns1:result> <name>John Smith</name> <age>30</age> <country>USA</country> </ns1:result> <ns1:result> <name>Alice Jones</name> <age>25</age> <country>UK</country> </ns1:result> </ns1:response> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
上面的XML程式碼包含了一個SOAP回傳值的範例。它的根節點是<SOAP-ENV:Envelope>
,其中包含了一個<SOAP-ENV:Body>
節點,<SOAP-ENV:Body> ;
節點裡面有一個<ns1:response>
節點,這個節點裡面有兩個<ns1:result>
節點。每個<ns1:result>
節點包含了三個元素節點:<name>
、<age>
和<country> ;
。
這個XML回傳值包含了兩個人的信息,我們可以透過PHP將它轉換成一個數組,方便我們處理這些資料。
二、使用PHP的simplexml_load_string()函數轉換XML為陣列
在PHP中,我們可以使用內建的simplexml_load_string()
函數將XML轉換為陣列。在上面的XML範例中,我們可以使用以下PHP程式碼將它轉為陣列:
$xmlstr = '<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/webservice.php"> <SOAP-ENV:Body> <ns1:response> <ns1:result> <name>John Smith</name> <age>30</age> <country>USA</country> </ns1:result> <ns1:result> <name>Alice Jones</name> <age>25</age> <country>UK</country> </ns1:result> </ns1:response> </SOAP-ENV:Body> </SOAP-ENV:Envelope>'; $xml = simplexml_load_string($xmlstr); $json = json_encode($xml); $array = json_decode($json, true); print_r($array);
在上面的程式碼中,我們首先將XML字串複製到$xmlstr
變數中,然後使用simplexml_load_string()
函數將它轉換為PHP物件。接下來,我們使用json_encode()
和json_decode()
函數將PHP物件轉換為數組,最後使用print_r()
函數列印出這個數組。
運行這個程式碼,我們將會得到以下的輸出:
Array ( [response] => Array ( [result] => Array ( [0] => Array ( [name] => John Smith [age] => 30 [country] => USA ) [1] => Array ( [name] => Alice Jones [age] => 25 [country] => UK ) ) ) )
上面的輸出展示了一個PHP數組,其中包含了SOAP傳回的XML轉換後的資料。我們可以非常方便地使用這些數據進行處理。
三、使用PHP的SimpleXMLElement類別
除了上面提到的simplexml_load_string()
函數,我們也可以使用PHP內建的SimpleXMLElement類別來轉換XML為陣列。
在下面的程式碼中,我們使用PHP內建的file_get_contents()函數從指定的URL中取得XML資料:
$xmlstr = file_get_contents('http://localhost/webservice.php'); $xml = new SimpleXMLElement($xmlstr); $json = json_encode($xml); $array = json_decode($json, true); print_r($array);
上面的程式碼中,我們先使用file_get_contents( )
函數取得XML數據,然後使用PHP內建的SimpleXMLElement類別將XML轉換為PHP物件。接下來,我們使用json_encode()
和json_decode()
函數將PHP物件轉換為數組,最後使用print_r()
函數列印出結果。
上面的程式碼與前面的例子極為類似,差別僅僅在於我們使用了SimpleXMLElement類別將XML轉換成物件。轉換後,我們可以像操作數組一樣使用這些資料。
總結
本文介紹如何使用PHP的內建函數將SOAP傳回的XML資料轉換成陣列。這些技巧可以讓我們更方便地使用web service的回傳值,從而加快我們進行開發和整合的速度。無論是使用simplexml_load_string()函數或是SimpleXMLElement類,都可以讓我們輕鬆地將XML轉換為PHP陣列。
以上是php怎麼將soap回傳的xml轉成數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!