这是我的代码:
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, "");
但是它会把所有文件都归结为我在这里做错了什么?
感谢。
答案 0 :(得分:4)
目前,您的查询适用于名称值小于momo.text
而非等于它的项目。因此,请将Lt
更改为Eq
。
答案 1 :(得分:3)
FileRef
字段包含文档的服务器相对URL,类似于“/Subsite/Lists/ListName/DocumentName
”。如果您只提供文件名(例如mono.txt
),则Lt
或Eq
都不起作用。
要解决此问题,您可以尝试:
Eq
与服务器相对URL而不是文件名一起使用。sb.AppendLine(@"<Where><Eq>"); sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/SubSite/Lists/Documents/momo.txt</Value>"); sb.AppendLine(@"</Eq></Where>");
<Contains>
运算符(CAML没有&lt; EndsWith>
运算符)。sb.AppendLine(@"<Where><Contains>"); sb.AppendLine(@"<FieldRef Name='FileRef' /><Value Type='Text'>/momo.txt</Value>"); sb.AppendLine(@"</Contains></Where>");
然后循环返回结果,并删除不以“/mono.txt
”结尾的项目。
此外,如果您关心没有扩展名的文档名称,您可以BaseName
而不是FileRef
字段。