2010-05-12 34 views
0

我想在PHP中開發一個非常簡單的SOAP服務器和客戶端。 目標是從遠程XML文檔接收內容作爲源。PHP中的SOAP服務器和客戶端

這就是我迄今爲止所做的,我需要幫助如何從XML文件中提取數據,而不是像現在這樣從普通數組中提取數據。 這是在inventory_functions.php中找到的函數,它是從數組中獲取的,它如何被改爲從XML文件中獲取呢? 我在正確的軌道上,這是一個SOAP設置?

function getItemCount($upc) { 

    // In reality, this data would be coming from a database 

    $items = array('12345'=>5,'19283'=>100,'23489'=>'234'); 

    // Return the requested value 

    return $items[$upc]; 

} 

這是該服務器的代碼:

// Load the database 

    require 'inventory_functions.php'; 

    // Turn off WSDL cache 

    ini_set("soap.wsdl_cache_enabled", "0"); 

    // Create a new SoapServer object with inventory.wsdl 

    $server = new SoapServer("inventory.wsdl"); 

    // Register the getItemCount function 

    $server->addFunction("getItemCount"); 

    // Start the handle 

    $server->handle(); 

這是客戶端的代碼:

// Turn off WSDL cache 

ini_set("soap.wsdl_cache_enabled", "0"); 

// Create a new SOAPClient object 

$client = new SoapClient("inventory.wsdl"); 

// Get the value for the function getItemCount with the ID of 12345 

$getItemCount = $client->getItemCount('12345'); 

// Print the result 

echo ($getItemCount); 

請幫幫忙!

+0

您能更具體地瞭解涉及XML的位置嗎?它是你的評論中的數據庫「//實際上,這些數據將來自數據庫」 – Benoit 2010-05-12 08:07:54

+0

XML文檔尚未開發,我的想法是,我將從任何給定的XML源獲取內容。我只需要使用XML文檔作爲數據源,而不是像現在這樣使用普通數組。 – user339067 2010-05-12 08:16:09

回答

2

問題不在於SOAP服務器問題,而在於XML訪問。

假設你的XML包含相同的數據作爲例子引用的數組,你可以在服務器上得到simpleXML

//load your xml file into $xmlStr, with file_get_contents() or whatever. 
$xmlObj = simplexml_load_string($xmlStr); 
$items = objectsIntoArray($xmlObj); 

您還可以使用DomDocument相反,它有一個DOM API,因此,如果您熟悉HTML DOM會更容易。

在你的例子中它有一個很大的優勢,你可以使用Xpath直接在XML內搜索結果,而不是使用數組。

+0

謝謝!這看起來很有趣。所以上面的$ items現在是一個普通的數組?代碼的其餘部分看起來不錯(我是SOAP的新手)? – user339067 2010-05-12 08:35:01

+0

這是將XML數據從客戶端傳送到服務器的SOAP信封的確切解決方案。謝謝!爲你+1。 – 2012-08-10 20:53:12