首頁  >  文章  >  後端開發  >  php怎麼將soap回傳的xml轉成數組

php怎麼將soap回傳的xml轉成數組

PHPz
PHPz原創
2023-03-31 09:09:53955瀏覽

在使用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&gt ;節點裡面有一個<ns1:response>節點,這個節點裡面有兩個<ns1:result>節點。每個<ns1:result>節點包含了三個元素節點:<name><age><country&gt ;

這個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn