不能将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();