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