2009-04-23 69 views
1

有沒有人成功編寫過使用http:///_vti_bin/lists.asmx中的GetListItems()方法從SharePoint 2007列表(特別是InfoPath表單庫)提取數據的代碼服務(並生活告訴它)?它返回一些最差 XML我這輩子見過的(它甚至不是兼容的XML)。有沒有一些簡單的方法來解析C#中的數據,或者我需要手動解析它?從SharePoint Web服務查詢列表數據

任何幫助,將不勝感激。

回答

2

當然,這不是最好的做事方式,但它只是一個正確的例子。

我已經使用下面的代碼來從獲取列表查詢中獲取「stuff」。

public static XmlNodeList XpathQuery(XmlNode xmlToQuery, string xPathQuery) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(xmlToQuery.OuterXml); 
    XmlNamespaceManager mg = new XmlNamespaceManager(doc.NameTable); 
    mg.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/"); 
    mg.AddNamespace("z", "#RowsetSchema");         
    mg.AddNamespace("rs", "urn:schemas-microsoft-com:rowset"); 
    mg.AddNamespace("y", "http://schemas.microsoft.com/sharepoint/soap/ois"); 
    mg.AddNamespace("w", "http://schemas.microsoft.com/WebPart/v2"); 
    mg.AddNamespace("d", "http://schemas.microsoft.com/sharepoint/soap/directory"); 
    return doc.SelectNodes(xPathQuery, mg); 
} 

使用

XmlNode items = lists.GetListItems(listName, string.Empty, listQuery, listViewFields, string.Empty, listQueryOptions, g.ToString()); 
    foreach (XmlNode listItem in SPCollection.XpathQuery(items, "//sp:listitems/rs:data/z:row")) 
    { 
     XmlAttribute id = listItem.Attributes["ows_Id"]; 
     if (id != null) 
     { 
      pageId = id.Value;      
     } 

    } 

的例子並不做了一大堆調用它,但希望它給你如何去獲取數據出了個主意。 是的,我不喜歡intensly與XPathQueries整個命名空間的問題,但什麼是你該怎麼辦。

我只是沒有興趣重寫SharePoint Web服務,特別是在我們的環境中進行測試和發佈需要數週的努力。有時候,沒有選擇。例如。如果你想訪問的SPWeb的自定義屬性袋或創建使用特定的網站模板和內容數據庫(或任何未在Web服務中實現的其他東西萬元)一SiteCollection。但是,對於簡單的列表訪問,Web服務看起來很好。

+0

我可以問一個非常愚蠢的問題嗎?你是如何知道這些命名空間的? – senfo 2009-04-24 17:59:52

1

InfoPath無法在列表Web服務中處理來自GetListItems的XML。對於InfoPath 2007,您有兩種選擇:

  1. 使用不允許過濾列表內容的InfoPath 2007 SharePoint數據連接。你必須抓住所有的內容返回給客戶端(或服務器,如果它是的InfoPath Forms Services),然後你的InfoPath規則中過濾。
  2. 編寫一個駐留在SharePoint中的Web服務,該服務以InfoPath 2007可以消化的格式返回數據。我在那裏你可以傳遞一個列表名稱和CAML查詢之前已經做到了這一點,並設置字段,它會返回名稱/值對的行。不幸的是,我現在不允許分享這些代碼。
+0

消費者實際上是一個C#控制檯應用程序。我相信建立一個返回列表項的強類型集合會無限比原生的做法更容易定製的Web服務。感謝您的答覆。 – senfo 2009-04-23 18:20:58