不能将Descendants()或Elements()与xmlns一起使用

我是使用XML的新手,在尝试从spring.net配置文件中获取特定标记时遇到了一个奇怪的问题。 在尝试使用测试xml文件缩小问题范围后,我发现应用以下代码:

List nodes = xmlFile.Descendants("B").ToList(); 

提供包含以下文件的非空列表:

     

但是提供带有以下文件的空字符串:

     

作为属性的文件之间的唯一区别。

我无法想象对此的解释。 谢谢你的帮助。

您需要在该命名空间中搜索标记:

 XNamespace ns = "aaa"; xmlFile.Descendants(ns + "B").ToList() 

为了完整起见:

 var lst = doc.Descendants("{aaa}B").ToList(); 

(另一个说的是正确的,但我想给另一种选择:-))

为了超完整性,如果要搜索忽略命名空间:

 var lst = doc.Descendants().Where(p => p.Name.LocalName == "B").ToList(); 

您应该在查询元素时指定命名空间。

您可以使用GetDefaultNamespace方法来避免对其进行硬编码。 如果您不知道它是什么,它也很有用。

例:

 var ns = xmlFile.GetDefaultNamespace(); var nodes = xmlFile.Descendants(ns + "B").ToList();