C# XDocument的子代,其中名称包含

C# XDocument的子代,其中名称包含,c#,linq-to-xml,C#,Linq To Xml,我可能没有在谷歌上搜索正确的关键词,因为我似乎找不到任何类似的关键词 我有一份XDocument,它的后代分布在不同的地方,比如: <country> <addressCountry> <idcountry> 我该怎么做呢?感谢您提供的所有帮助。您需要元素名称中的本地名称部分: // Adjust this how you wish. var comparison = StringComparison.InvariantCultureIgnoreCase;

我可能没有在谷歌上搜索正确的关键词,因为我似乎找不到任何类似的关键词

我有一份XDocument,它的后代分布在不同的地方,比如:

<country>
<addressCountry>
<idcountry>
我该怎么做呢?感谢您提供的所有帮助。

您需要元素名称中的本地名称部分:

// Adjust this how you wish.
var comparison = StringComparison.InvariantCultureIgnoreCase;
var elements = 
      doc.Descendants()
         .Where(x => x.Name.LocalName.IndexOf("country", comparison) != -1);
(这是执行不区分大小写检查的一种更干净的方法-它避免了下框
I
ı
的“土耳其”问题。令人恼火的是
Contains
没有重载,这需要
stringcomparator
StringComparer
,但这就是生活……)


只需注意可能出现的命名空间问题…

,这些问题不会得到
。但是OP也希望得到这些。这样,我得到了一个例外:
'string'不包含'Contains'和最佳扩展方法重载'System.Linq.Queryable.Contains(System.Linq.IQueryable,TSource,System.Collections.Generic.IEqualityComparer'的定义。它有一些无效的参数
。看起来您不能对字符串使用不区分大小写的
Contains
(简单的方法)。我必须将其更改为:
var elements=xe.substands(),其中(x=>x.Name.LocalName.IndexOf(“国家”,比较)>=0)
@Corak:谢谢你有鹰眼-我显然没有喝足够的咖啡:)我把它改成了
!=-1
希望更清楚地知道它在保护什么。
// Adjust this how you wish.
var comparison = StringComparison.InvariantCultureIgnoreCase;
var elements = 
      doc.Descendants()
         .Where(x => x.Name.LocalName.IndexOf("country", comparison) != -1);
myXDocument.Descendants("country")