如何在整个XML文件中搜索关键字?

时间:2012-10-11 01:03:24

标签: c# xml linq

我正在学习C#,我尝试做的其中一件事是在XML文件中读取并搜索它。

我找到了一些示例,我可以搜索特定关键字的特定节点(例如,如果它的名称或ISBN)。

我想要做的是搜索整个XML文件,以便找到关键字的所有可能匹配项。

我知道LIST允许“包含”查找关键字,是否有类似的搜索XML文件的功能?

我使用安装visual studio时包含的通用books.xml文件。

3 个答案:

答案 0 :(得分:0)

例如,您可以使用LINQ TO XML。此示例在元素和属性中搜索关键字 - 名称和值。

private static IEnumerable<XElement> FindElements(string filename, string name)
{
    XElement x = XElement.Load(filename);
    return x.Descendants()
            .Where(e => e.Name.ToString().Equals(name) ||
                        e.Value.Equals(name) ||
                        e.Attributes().Any(a => a.Name.ToString().Equals(name) || 
                                                a.Value.Equals(name)));
}

并使用它:

string s = "search value";
foreach (XElement x in FindElements("In.xml", s))
    Console.WriteLine(x.ToString());

答案 1 :(得分:0)

如果您只想在叶节点的文本中搜索关键字,请尝试以下操作 (使用此示例books.xml):

string keyword = "com";
var doc = XDocument.Load("books.xml");

var query = doc.Descendants()
    .Where(x => !x.HasElements &&
                x.Value.IndexOf(keyword, StringComparison.InvariantCultureIgnoreCase) >= 0);
foreach (var element in query)
    Console.WriteLine(element);

输出:

<genre>Computer</genre>
<description>A former architect battles corporate zombies,
      an evil sorceress, and her own childhood to become queen
      of the world.</description>
<genre>Computer</genre>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
<description>Microsoft Visual Studio 7 is explored in depth,
      looking at how Visual Basic, Visual C++, C#, and ASP+ are
      integrated into a comprehensive development
      environment.</description>

答案 2 :(得分:0)

如果要查找已知的关键字,可以将XML解析为简单的文本文件,并使用StreamReader进行解析。但是,如果您正在寻找XML中的元素,您可以使用XmlTextReader(),请考虑以下示例:

using (XmlTextReader reader = new XmlTextReader(xmlPath))
{
    while (reader.Read())
    {
        if (reader.NodeType == XmlNodeType.Element)
        { 
            //do your code here
        }
    }
}

希望它有所帮助。 :)