15 49.0138 8.38624 1 0 4000 1 https://www.alexmedina.net 300 true 0

Linq to XML, .Descendants() no devuelve resultados

0 Comments

Tenemos un XML con esta forma, que tiene definido un espacio de nombres para algunas etiquetas (véase el ns4). Aparentemente su lectura con Linq to XML es sencilla, con un simple Descendats o Elements nos dará los resultados que queremos… pero algo va mal… cunden los nervios y no aparecen los resultados, podemos llegar a realizar combinaciones imposibles y no caer que en el XML viene con el espacio de nombre en las etiquetas que hacen referencia a un URL. Este es un ejemplo:

<DatosAdicionales>
     <ns4:Prueba atributo="0">
       <Prueba2 causa="blablabla">
           <Prueba5 descriptivo="dasdasdasd" porcentaje="100.00" importe="0.00" />
       </Prueba2>
     </ns4:Prueba>
     <ns4:Prueba/>
 </DatosAdicionales>

Si nos encontramos con el problema de que Linq to XML no lee al hacer:

 //cargamos el xml en la variable "xml" .....
 var XML1 = (from c in xml.Descendants("DatosAdicionales") select c).FirstOrDefault();
 var XML2= (from c in XML1.Descendants("Prueba") select c).FirstOrDefault(); 
// NULL -&gt; No da resultado¿?¿?¿

Para que consiga leer tenemos que tener definido el espacio de nombre previamente con XNamespace:

XNamespace ns4 = "http://url de definicion....";
var XML2= (from c in XML1.Descendants(ns4 + "Prueba") select c).FirstOrDefault(); // Éxito¡

En este hilo más info: http://stackoverflow.com/questions/2338512/understanding-linq-to-xml-descendants-return-no-results

linqtoxml

Previous Post
Indicar a Facebook que imagen mostrar cuando se comparte la url
Next Post
Hacer un backup de base de datos MySQL usando PHP

0 Comments

Leave a Reply

SOBRE MÍ

Afortunado de trabajar en lo que me gusta, aprendiendo cada día cosas nuevas y ayudando a crear proyectos.
Conocimientos en diversas tecnologías y experiencia demostrable.
¿Nos ponemos manos a la obra?

Mis Apuntes