12.12.2008

Consultas con Linq2XML

En post anteriores hemos descrito como llevar a cabo consultas de diversos tipos utilizando Linq2Objects y una lista genérica de productos como fuente de datos. En esta ocasión vamos a utilizar Linq – específicamente Linq2XML – para hacer consultas a un documento XML.

Inicialmente vamos a crear el documento XML al cual le vamos a consultar utilizando Linq2XML. El documento 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>
</
clientes>



Seguidamente vamos a crear el código necesario para consultar elementos sobre este documento. Inicialmente vamos a obtener todos los clientes del documento antes presentando. El código requerido 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")
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 este código simplemente cargamos el documento xml en una variable de tipo XDocument, seguidamente seleccionamos todos los descendientes del nodo raíz que en este caso es cliente, y luego creamos objetos anónimos con el nombre y el país del cliente que estamos consultando.



El resultado al ejecutar esta consulta se ve en la siguiente pantalla:



image



En los post próximos vamos a ver como ampliar el uso de Linq2XML en lo que se refiere a consultas de diversos tipos.

No hay comentarios: