在我的应用程序中,我正在使用 asp.net,c#,jquery ,我的要求如下:
我有一个xml文件“Mobile.xml”,其内容如下:
<Mobiles>
<Mobile Id="1">
<MDetails ModelNo="1" Desc="x phone color red"/>
<MDetails ModelNo="2" Desc="x phone color green"/>
<MDetails ModelNo="3" Desc="x phone color blue"/>
<MDetails ModelNo="4" Desc="x phone color black"/>
<MDetails ModelNo="5" Desc="x phone color yellow"/>
<MDetails ModelNo="6" Desc="x phone color pink"/>
<MDetails ModelNo="7" Desc="x phone color gray"/>
<MDetails ModelNo="8" Desc="x phone color silver"/>
<MDetails ModelNo="9" Desc="x phone color orange"/>
</Mobile>
<Mobile Id="2">
<MDetails ModelNo="11" Desc="y phone color red"/>
<MDetails ModelNo="12" Desc="y phone color green"/>
<MDetails ModelNo="13" Desc="y phone color blue"/>
<MDetails ModelNo="14" Desc="y phone color black"/>
<MDetails ModelNo="15" Desc="y phone color yellow"/>
<MDetails ModelNo="16" Desc="y phone color pink"/>
<MDetails ModelNo="17" Desc="y phone color gray"/>
<MDetails ModelNo="18" Desc="y phone color silver"/>
<MDetails ModelNo="19" Desc="y phone color orange"/>
</Mobile>
<Mobile Id="3">
......
<Mobile>
......
</Mobiles>
我想要获取关于多个关键词 的所有标记 的详细信息,其中关键字将从输入搜索字符串中获取。
如果搜索字符串是“x phone color red green”,那么它应该返回标记的详细信息:
<MDetails ModelNo="1" Desc="x phone color red"/>
<MDetails ModelNo="2" Desc="x phone color green"/>
如果搜索字符串为:“手机颜色为红绿”则应返回:
<MDetails ModelNo="1" Desc="x phone color red"/>
<MDetails ModelNo="2" Desc="x phone color green"/>
<MDetails ModelNo="11" Desc="y phone color red"/>
<MDetails ModelNo="12" Desc="y phone color green"/>
我尝试了以下的代号:
public void doSearch(string strSearchContent)
{
string[] strArrSearchContents;
strArrSearchContents = strSearchContent.Split(' ');
string fileName = HttpContext.Current.Server.MapPath(@"~\XMLFiles/Mobile.xml");
XDocument doc = null;
if (System.IO.File.Exists(fileName))
{
doc = XDocument.Load(fileName);
IEnumerable<XElement> list1 =
from elements in doc.Descendants("MDetails")
where
elements.Attribute("Desc").Value.Trim().ToLower().Contains(strArrSearchContents[0]) &&
elements.Attribute("Desc").Value.Trim().ToLower().Contains(strArrSearchContents[1]) &&
elements.Attribute("Desc").Value.Trim().ToLower().Contains(strArrSearchContents[2]) &&
elements.Attribute("Desc").Value.Trim().ToLower().Contains(strArrSearchContents[3]) &&
elements.Attribute("Desc").Value.Trim().ToLower().Contains(strArrSearchContents[4])
select elements;
}
}
上述代码根本不是这种搜索的解决方案...... 但我已经描述了我的要求。
答案 0 :(得分:0)
我写了一些更一般的东西,但我认为你可以使用它。基本上,它是一个linq查询,它表示:对于描述中的每个单词,请确保它包含在要查找的内容列表中。
string toFind = "x phone color red green";
string[] toFindStuff = toFind.Split(' ');
List<string> desc = new List<string>{ "x phone color red", "y phone color green", "x phone color blue", "x phone color green"};
List<string> filtered = desc.Where(x => x.Split(' ').All(y => toFindStuff.Contains(y))).ToList();
结果:
List<String> (2 items)
x phone color red
x phone color green