I am having some trouble parsing an XML file with the root node having multiple namespaces. I want to get a list of nodes \'object\' with type string containing \'UserContro
When you call Decendants
with a XName
parameter the XName
'sNameSpace
(which happened to be empty) is actually incorporated into the Name
in addition to LocalName
. So you can query just byLocalName
p.Descendants().Where(p=>p.Name.LocalName == "object")
Try using the namespace:
var ns = new XNamespace("http://www.springframework.net");
IEnumerable<XElement> values = webXMLResource.Descendants(ns + "object");
If you are using decedent than you have to add name space like below
XDocument webXMLResource = XDocument.Load(@"../../../../Web.xml");
XNamespace _XNamesapce = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
IEnumerable<XElement> values = from ele in webXMLResource .Descendants(_XNamesapce + "object")
select ele;
Hope it will work for you
One more trick with namespaces - you can use XElement.GetDefaultNamespace() to get default namespace of root element. Then use this default namespace for querying:
var xdoc = XDocument.Load(path_to_xml);
var ns = xdoc.Root.GetDefaultNamespace();
var objects = xdoc.Descendants(ns + "object");