12.19.2008

Linq2XML – Filtrando en una consulta

Para continuar con el tema de linq to xml, en este post vamos a crear un ejemplo en donde se realiza una consulta a un documento XML y vamos a filtrar el contenido del XML para obtener solo los registros que cumplan con la condición que deseamos.

Para iniciar, el documento XML que vamos a utilizar es el siguiente.

<?xml version="1.0" encoding="utf-8" ?>
<
clientes>
<
cliente>
<
nombre>Juan Perez</nombre>
<
cuidad>Buenos Aires</cuidad>
<
pais>Argentina</pais>
</
cliente>
<
cliente>
<
nombre>Ernesto Jimenez</nombre>
<
cuidad>La Paz</cuidad>
<
pais>Bolivia</pais>
</
cliente>
<
cliente>
<
nombre>Ana Mora</nombre>
<
cuidad>Heredia</cuidad>
<
pais>Costa Rica</pais>
</
cliente>
<
cliente>
<
nombre>Ismael Lopez</nombre>
<
cuidad>Cuidad de Guatemala</cuidad>
<
pais>Guatemala</pais>
</
cliente>
<
cliente>
<
nombre>Diego Simon</nombre>
<
cuidad>Buenos Aires</cuidad>
<
pais>Argentina</pais>
</
cliente>
<
cliente>
<
nombre>Ismael Lopez</nombre>
<
cuidad>Cuidad de Guatemala</cuidad>
<
pais>Guatemala</pais>
</
cliente>
<
cliente>
<
nombre>Isis Benavides</nombre>
<
cuidad>Alajuela</cuidad>
<
pais>Costa Rica</pais>
</
cliente>
</
clientes>



Seguidamente vamos a crear una consulta utilizando Linq2XML en la cual vamos a seleccionar todos los clientes que tengan como país Argentina o Costa Rica. Nótese que la condición de búsqueda es compuesta, ya que debemos crear un where y un or en la condición del where. El código para llevar a cabo esta consulta es el siguiente:



static void Main( string[] args )
{
XDocument xmlDoc = XDocument.Load("Clientes.xml");
var resultado = from cliente in xmlDoc.Descendants("cliente")
where cliente.Element("pais").Value == "Argentina"
|| cliente.Element("pais").Value ==
"Costa Rica"
select new
{
Nombre = (string)cliente.Element("nombre"),
pais = (string)cliente.Element("pais")
};
foreach (var cliente in resultado)
{
Console.WriteLine(cliente.Nombre);
Console.WriteLine(cliente.pais);
Console.WriteLine("-----------------");
}
}



En general, este código es casi el mismo que utilizamos en el post anterior acerca de linq2XML, lo que lo diferencia es la condición utilizada para llevar a cabo la búsqueda. En este caso, dentro del elemento cliente utilizamos el elemento país para acceder al valor de este nodo, y lo comparamos con el nombre de los países que deseamos filtrar. Como queremos filtrar por dos países, entonces ligamos la misma condición con el símbolo (||) or en C# y procedemos a ejecutar la consulta. El resultado de la ejecución de este código se puede ver en la siguiente pantalla.



image

No hay comentarios: