2011-05-27 78 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

相关问题