Linq to XML con espacios de nombres

Realizar consultas en documentos XML con Linq es realmente practico. Para cargar un documento usaremos XDocument. Para cargar un nodo usaremos XElement. Sea como sea si este documento o nodo contiene un espacio de nombres las consultas Linq no devuelven el valor correctamente.

Por ejemplo el siguiente documento XML contiene un espacio de nombres en nodo raíz:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Project xmlns="http://schemas.microsoft.com/project">  
 <SaveVersion>12</SaveVersion> 
 <Tasks>   
  <Task>    
   <UID>0</UID>    
   <ID>0</ID>    
   <Type>0</Type>    
   <IsNull>0</IsNull>    
   <WBS>0</WBS>    
   <OutlineNumber>0</OutlineNumber> 
  </Task>
 </Tasks>
</Project>

El código que te va a permitir leer correctamente los nodos del documento es el siguiente donde puedes ver como se crea el espacio de nombres y ese se usa en las consultas Linq.

XDocument xDoc = XDocument.Parse(inputString); 
XNamespace ns = "http://schemas.microsoft.com/project";
var data = from c in xDoc.Descendants(ns + "Task")            
           select (string)c.Element(ns + "Type"); 
foreach (string val in data) 
{    
 Console.WriteLine(val); 
}

Més informació a :

XDocument and Linq returns null if the element has xmlns attribute

XNamespace (Clase)

Deixa un comentari