在 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");
有没有一种方法可以减少下面的 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
:
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");