2011-09-17 19 views
2

我試圖使用GetListItems Web服務方法來檢索列表的所有項目。該方法引發一條InvalidOperation異常,消息是「XML文檔中存在錯誤」。似乎至少有一個列值包含「非法」十六進制值......至少就XML節點而言。SharePoint列表數據的XML字符串

除了在時間拉回每個項目一個(並跳過「壞」項),有沒有辦法讓在由GetListItems返回的原始XML數據?我的想法是,如果我有原始字符串,我可以嘗試在將其轉換爲XML節點(然後再轉換爲DataTable)之前進行清理。

任何其他的想法,將不勝感激。

感謝

傑森

回答

0

你可以驗證返回的數據實際上是正確的XML數據,而不是是一個HTML錯誤頁面,如401或404錯誤頁面?

+0

是。當我使用Fiddler時,我看到XML數據被返回。此外,當我修改查詢以排除該列表項時,代碼將按預期工作。 – Jason

0

@Jason我無法重現完全按照你描述的問題,但我想嘗試一下這種方法:

  1. 檢查您的VisualStudio,選項,調試,通用,unchek選項「啓用僅我的代碼「
  2. 顯示你的自動生成Reference.cs,在那裏你撥打GetListItems光標位置(即XmlNode的ndListItems = listService.GetListItems(SLIST,空,ndQuery,ndViewFields, 」0「,ndQueryOptions,NULL); 然後PRES F12(轉到定義)

    1. 放置一個斷點(和觀察點)甚至改變自動生成的代碼; 在這裏你可以能夠檢查(快速監視,或者你喜歡的tecnique)通過調用 即返回objec [] restults:

      [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://schemas.microsoft.com/sharepoint/soap/GetListItems", RequestNamespace="http://schemas.microsoft.com/sharepoint/soap/", ResponseNamespace="http://schemas.microsoft.com/sharepoint/soap/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
      public System.Xml.XmlNode GetListItems(string listName, string viewName, System.Xml.XmlNode query, System.Xml.XmlNode viewFields, string rowLimit, System.Xml.XmlNode queryOptions, string webID) { 
      object[] results = this.Invoke("GetListItems", new object[] { 
            listName, 
            viewName, 
            query, 
            viewFields, 
            rowLimit, 
            queryOptions, 
            webID}); 
      
      Debug.WriteLine(results.Length); 
      
      return ((System.Xml.XmlNode)(results[0])); 
      

      }

我期待要知道,如果這能幫助你更好地識別和解決問題

+1

非常感謝您的回覆,但自去年以來我一直沒有做過這方面的工作。我不記得我是怎麼做到的,但我最終追查了導致問題的一個列表項目,並修改了我的查詢以排除那個項目。 – Jason