我們已經在我們已經建立的許多Web服務上做了這些工作,並且很快也會爲Sharepoint做到這一點。正如你所說,你可以用XML獲取數據。所以,你只需要 1)檢索XML數據 2)解析XML數據 3)返回現在可讀的數據塊在Drupal
對於1,你需要打開任何防火牆的訪問,並提供一個公開可讀XML提要或將其設置爲只能通過Drupal服務器的IP或其他身份驗證機制訪問。 2PHP爲您提供了許多關於如何解析XML的選項。我們創建了一個模塊來處理XML服務,然後我們從另一個處理顯示,主題等的模塊中調用它。下面我將首先提供來自XML模塊的兩個函數的示例,然後舉例說明可能會在另一個模塊中使用它。
這是來自XML模塊。
/**
* Retrieving XML data from the URL
*
* @param $url
* The url to retrieve the data
* @param $replace_special_characters
* Replace special character to HTML format
*
* @return parse result as struct
*/
function xmlservice_parse($url, $replace_special_characters = FALSE) {
$http_contents = drupal_http_request($url);
if (!isset($http_contents->data)) {
throw new RuntimeException("Cannot get contents from the URL");
}//if
if($replace_special_characters)
$http_contents_data = str_replace('&','&', $http_contents->data);
else
$http_contents_data = $http_contents->data;
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $http_contents_data, $result);
xml_parser_free($xml_parser);
return $result;
}
/**
* Retrieving XML data as Dom document from the URL
*
* @param $url
* The url to retrieve the data
* @param $replace_special_characters
* Replace special character to HTML format
*
* @return result as Dom Document
*/
function xmlservice_parse_to_dom($url, $replace_special_characters = FALSE) {
$http_contents = drupal_http_request($url);
if (isset($http_contents->error)) {
throw new RuntimeException($http_contents->error);
}//if
if (!isset($http_contents->data)) {
throw new RuntimeException("Cannot get contents from the URL");
}//if
if($replace_special_characters){
$http_contents_data = str_replace('&','&', $http_contents->data);
}//if
else{
$http_contents_data = $http_contents->data;
}//else
$dom_document = new DomDocument;
/* load htmlinto object */
$dom_document->loadXML($http_contents_data);
/* discard white space */
$dom_document->preserveWhiteSpace = false;
return $dom_document;
}
然後,只需編寫代碼來創建一個塊。如果你不知道該怎麼做,請查看http://www.nowarninglabel.com/home/creating-a-new-custom-module-in-drupal-6,它會創建一個簡單的塊。然後,對於內容,您可以在XML文檔中調用上述函數之一,例如$ content = xml_service_parse('http://sharepoint.example.com/some/thing/feed.xml');
如果你想解析爲一個節點,你可以只使用XML功能,而是使用node_save()以編程方式創建一個節點:http://api.drupal.org/api/function/node_save 我沒有看過可用的SharePoint Services的太多了,但你可能只是將XML解析爲如上所示的dom文檔,然後通過循環創建一個適合每個符合條件的XML節點的節點。
如果你想要更多的
希望所做的工作,這是有幫助的。隨意詢問更多細節。
好的建議。我嘗試了FeedAPI的升級版本(簡稱爲Feeds),這幾乎就是我一直在尋找的東西。唯一的問題是,我需要它來解析XML提要。它處理RSS/atom和CSV,但不處理XML。如果你(或者任何人)知道一種方法來讓它從XML創建節點,那對我會有很大的幫助。無論如何非常感謝你。 /Anders – andersandersson666 2010-03-17 13:56:22
@ andersandersson666:RSS和ATOM提要已經是XML了,所以你根本沒有在尋找一種通常從XML創建節點的方法,而是根據Web服務輸出的模式從XML創建節點」。這就是我最後一段的目標 - 您可以嘗試配置您的SharePoint服務器以提供FeedAPI能夠理解的格式提供內容,或者您需要爲FeedAPI模塊實施定製解析器插件,該模塊「理解/翻譯'您的Web服務當前提供的XML。 – 2010-03-17 14:56:43