在XmlNodeList中搜索特定字符串

时间:2015-03-20 11:59:27

标签: c# xml xml-parsing

有没有办法可以减少下面的foreach代码,所以我不必使用foreach循环迭代xml节点?

我只想查看xml文件中是否存在项目

XmlDocument doc = new XmlDocument();
doc.Load("MyList.xml");

XmlNodeList list = doc.SelectNodes("/MyList/item");
foreach( XmlNode item in list)
{
    string name = item.InnerText;
    if(name == "blah blah")
    {
       //do something
    }
}

上述工作,但我只想要一个更小的冷却方式:)

2 个答案:

答案 0 :(得分:2)

您可以直接在XPath表达式中按内部文本过滤元素,如下所示:

XmlNodeList list = doc.SelectNodes("/MyList/item[.='blah blah']");

答案 1 :(得分:2)

如果您只想检查某个节点是否存在,请使用带有过滤的XPath的SelectSingleNode

XmlNode node = doc.SelectSingleNode("/MyList/item[. = 'blah blah']");
if (node != null)
{
    // do something
}

这里的一个问题是,如果要匹配的值是动态值,则不应通过将字符串连接在一起来构建XPath。这会产生无效的XPath。

在这种情况下,您可以在XmlNodeList上使用LINQ:

var found = doc.SelectSingleNode("/MyList/item")
               .Cast<XmlNode>()
               .Any(n => n.InnerText == "blah blah");

或继续使用LINQ-to-XML:

XDocument doc = XDocument.Load("MyList.xml");

bool itemFound = doc.Element("MyList")
                   .Elements("item")
                   .Any(e => (string) e == "blah blah");