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)

Anuncis

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s