使用SharePoint Lists.asmx GetListItems按名称搜索文档

时间:2011-05-27 15:51:14

标签: c# sharepoint

这是我的代码:

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, "");

但是它会把所有文件都归结为我在这里做错了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

目前,您的查询适用于名称值小于momo.text而非等于它的项目。因此,请将Lt更改为Eq

答案 1 :(得分:3)

FileRef字段包含文档的服务器相对URL,类似于“/Subsite/Lists/ListName/DocumentName”。如果您只提供文件名(例如mono.txt),则LtEq都不起作用。

要解决此问题,您可以尝试:

  1. Eq与服务器相对URL而不是文件名一起使用。
  2. 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没有&lt; EndsWith>运算符)。
    2. sb.AppendLine(@"<Where><Contains>");  
      sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/momo.txt</Value>");  
      sb.AppendLine(@"</Contains></Where>");
      

      然后循环返回结果,并删除不以“/mono.txt”结尾的项目。

      此外,如果您关心没有扩展名的文档名称,您可以BaseName而不是FileRef字段。