在 XmlNodeList 中搜索特定字符串

Search an XmlNodeList for a specific string

有没有一种方法可以减少下面的 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
    }
}

上面的方法可行,但我只是想要一种更小、更酷的方法:)

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

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

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

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");