Skip to content


Ejemplo LINQ con XML

Aqui está el ejemplo de linq con ficheros xml.

Voy a seguir trabajando con los mismos datos que en el ejemplo anterior. El fichero xml queda así:

<libros>
   <libro>
      <titulo>Pascal 7</titulo>
      <autor>Luis Joyanes</autor>
   </libro>
   <libro>
      <titulo>Enciclopedia de C#</titulo>
      <autor>Francisco javier Ceballos </autor>
   </libro>
   <libro>
      <titulo>El código Davinci</titulo>
      <autor>Dan Brown </autor>
   </libro>
   <libro>
      <titulo>Ángeles y demonios</titulo>
      <autor>Dan Brown</autor>
   </libro>
</libros>

Antes de nada hay que hacer un “using” al linq de xml

using System.Xml.Linq;

Este método hace la ordenación por título de todos los libros

private void ordenaLinqXML(string path)
{
//Cargamos el documento xml (path es la dirección donde está el xml)
XDocument cargaDocumento = XDocument.Load(path);
//Creamos la query
var query = from libro in cargaDocumento.Descendants("libro")
orderby libro.Element("titulo").Value
select new
{
Titulo = libro.Element("titulo").Value,
Autor = libro.Element("autor").Value
};
//Mostramos el resultado de la ordenación en un ListBox
foreach(var libAux in query)
lbLinq.Items.Add(libAux.Titulo+"  -  "+libAux.Autor);
}

Este método hace la ordenación por título de todos los libros de “Dan Brown”

private void selectLinqXML(string path)
{
//Cargamos el documento xml (path es la dirección donde está el xml)
XDocument cargaDocumento = XDocument.Load(path);
//Creamos la query
var query = from libro in cargaDocumento.Descendants("libro")
where libro.Element("autor").Value.ToString().Equals("Dan Brown")
orderby libro.Element("titulo").Value
select new
{
Titulo = libro.Element("titulo").Value,
Autor = libro.Element("autor").Value
};
//Mostramos el resultado de la ordenación en un ListBox
foreach (var libAux in query)
lbLinq.Items.Add(libAux.Titulo + "  -  " + libAux.Autor);
}

Como podeis ver la query se escribe de forma parecida al ejemplo anterior, la diferencia es que para acceder a los valores hay que poner:

libro.Element("ELEMENTO AL QUE QUEREMOS ACCEDER").Value

Aunque la gran diferencia es esta:

select new
{
Titulo = libro.Element("titulo").Value,
Autor = libro.Element("autor").Value
};

Con esto, estamos creando las propiedades “Titulo” y “Autor” en cada uno de los elementos que va a tener la colección que recojamos de la query, y se hace en tiempo de EJECUCIÓN

Espero que os sirva de ayuda. Un saludo!

Artículos Relacionados

Posted in C#, Framework 3.5. Tagged with , , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.