c#中索引、搜索和存储信息的最佳方式



我正在编写一个需要快速索引和存储有关文件的信息的应用程序。我目前使用XML来存储信息,使用以下代码:

        XmlTextWriter xtw;
        xtw = new XmlTextWriter(FilePath, Encoding.UTF8);
        xtw.WriteStartDocument();
        xtw.WriteStartElement("ApplicationIndex");
        xtw.WriteEndElement();
        xtw.Close(); 
        XmlDocument xd = new XmlDocument();
        FileStream lfile = new FileStream(FilePath, FileMode.Open);
        xd.Load(lfile);
        XmlElement cl = xd.CreateElement("Application");
        cl.SetAttribute("Name", ApplicationName);
        XmlElement na = xd.CreateElement("Path");
        XmlText natext = xd.CreateTextNode(ApplicationPath);
        na.AppendChild(natext);
        cl.AppendChild(na);
        XmlElement na1 = xd.CreateElement("UseCount");
        XmlText natext1 = xd.CreateTextNode("0");
        na1.AppendChild(natext1);
        cl.AppendChild(na1);
        XmlElement na2 = xd.CreateElement("SearchTerm");
        XmlText natext2 = xd.CreateTextNode(ApplicationName.ToLower());
        na2.AppendChild(natext2);
        cl.AppendChild(na2);
        xd.DocumentElement.AppendChild(cl);
        lfile.Close();
        xd.Save(FilePath);

对于创建文件和存储数据来说,这很好,但是我在快速搜索数据时遇到了麻烦,因为文档中有几百个节点。我尝试使用Linq to XML来实现这一点,使用以下代码:

        listBox1.Items.Clear();
        var doc = XDocument.Load(filePath);
        foreach (var child in doc.Descendants("SearchTerm"))
        {
            if (child.Value.Contains(textBox1.Text.ToLower()))
            {
                listBox1.Items.Add(child.Value);
            }
        }

这是非常快的,但是我似乎无法获得有关所选节点的任何信息。例如,我想根据UseCount对返回的结果进行排序(计数越高,列表越靠前)。是否有办法在XML或其他技术中做到这一点?

XML文件是这样的:

    <?xml version="1.0" encoding="utf-8"?>
<ApplicationIndex>
  <Application Name="Google Chrome">
    <Path>C:Program FilesGoogleChromeChrome.exe</Path>
    <UseCount>0</UseCount>
    <SearchTerm>google chrome</SearchTerm>
  </Application>
  <Application Name="Mozilla Firefox">
    <Path>C:Program FilesMozillaFirefoxFirefox.exe</Path>
    <UseCount>0</UseCount>
    <SearchTerm>mozilla firefox</SearchTerm>
  </Application>
</ApplicationIndex>

您可以按降序UseCount对元素进行排序,如下所示:

var doc = XDocument.Load(filePath);
var elements = doc.Descendants("Application")
               .OrderByDescending(x => (int)x.Element("UseCount"));

根据给定的SearchTerm搜索记录,您可以执行以下操作:

var element = doc.Descendants("Application")
             .FirstOrDefault(x => (string)x.Element("SearchTerm") == value);
if(element != null)
{
    // record found
}

相关内容

  • 没有找到相关文章

最新更新