2011-05-27 62 views
2

這裏通過其名稱的文檔是我的代碼:搜索使用SharePoint Lists.asmx GetListItems

StringBuilder sb = new StringBuilder(); 
sb.AppendLine(@"<Where><Lt>"); 
sb.AppendLine(@"<FieldRef Name=""FileRef"" /><Value Type=""Text"">momo.txt</Value>"); 
sb.AppendLine(@"</Lt></Where>"); 

XmlDocument xmlDoc = new System.Xml.XmlDocument(); 

XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", ""); 
ndQuery.InnerXml = sb.ToString(); 

XmlNode resultsElement1 = listsProxy.GetListItems("Documents", "", ndQuery, 
                null, null, null, ""); 

但它返回的所有文件任何想法,我做錯了什麼?

謝謝。

回答

3

FileRef域中包含對於服務器的URL的文件,像這樣「/Subsite/Lists/ListName/DocumentName」。如果您僅提供文件名(如mono.txt),無論是LtEq應該工作。

爲了解決這個問題,你可以嘗試:

  1. 使用Eq與對於服務器的URL,而不是文件名。
 
sb.AppendLine(@"<Where><Eq>"); 
sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/SubSite/Lists/Documents/momo.txt</Value>"); 
sb.AppendLine(@"</Eq></Where>"); 
  1. 或者你可以使用<Contains>運營商(CAML沒有< EndsWith>運營商)。
 
sb.AppendLine(@"<Where><Contains>"); 
sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/momo.txt</Value>"); 
sb.AppendLine(@"</Contains></Where>"); 

然後遍歷返回的結果,並刪除不與「/mono.txt」結尾的項目。

另外,如果您關心文件名無擴展名,您可以BaseName而不是FileRef字段。

4

目前查詢是其中名稱值小於momo.text而不是等於它的項目。因此改變LtEq

相關問題