XDocument使用具有命名空间的Root元素读取XML文件

我在使用具有多个名称空间的根节点解析XML文件时遇到了一些麻烦。 我想得到一个包含’UserControlLibrary’的类型字符串的节点’对象’列表:
XML文件:

                   

我试过了:

  XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml"); IEnumerable values = webXMLResource.Descendants("object"); 

没有返回任何结果。

命名空间的另一个技巧 – 您可以使用XElement.GetDefaultNamespace()来获取根元素的默认命名空间。 然后使用此默认命名空间进行查询:

 var xdoc = XDocument.Load(path_to_xml); var ns = xdoc.Root.GetDefaultNamespace(); var objects = xdoc.Descendants(ns + "object"); 

当您使用XName参数调用DecendantsXNameNameSpace (恰好为空)实际上除了LocalName之外还包含在Name中。 因此,您只能通过LocalName进行查询

 p.Descendants().Where(p=>p.Name.LocalName == "object") 

尝试使用命名空间:

 var ns = new XNamespace("http://www.springframework.net"); IEnumerable values = webXMLResource.Descendants(ns + "object"); 

如果您使用的是decedent,则必须添加如下所示的名称空间

  XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml"); XNamespace _XNamesapce = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); IEnumerable values = from ele in webXMLResource .Descendants(_XNamesapce + "object") select ele; 

希望它对你有用