Informatica en Gnral.

Lectura de un archivo XML de manera local en WP


En esta ocasión voy a presentar como hacer una lectura de un archivo XML de forma local en Windows Phone, para ello se va a utilizar la clase XDocument, la cual se encuentra dentro del espacio de nombres System.Xml.Linq.

Empezaremos desde 0 este tutorial creando un nuevo proyecto (App).

NOTA: Linq también nos ayuda a hacer el recorrido de los elementos del archivo y así, utilizando las expresiones lambda ordenaremos los datos obtenidos.

Continuando con este tutorial lo primero que debemos de hacer es agregar un archivo XML en la carpeta de Recursos denominado AppData.xml (Resources/AppData.xml), mismo que llevara la siguiente estructura.

 

<?xml
version=1.0
encoding=utf-8 ?>

<data>

<users>

<user>

<id>0</id>

<firstname>Vicente</firstname>

<city>Guanajuato</city>

</user>

<user>

<id>1</id>

<firstname>Gabo</firstname>

<city>D.F</city>

</user>

<user>

<id>2</id>

<firstname>Martin</firstname>

<city>Mexico</city>

</user>

<user>

<id>3</id>

<firstname>Alex</firstname>

<city>Merida</city>

</user>

</users>

</data>    

Y una clase User.cs que se encontrara en la raíz del proyecto, su contenido es el siguiente:

public
class
User

{


public
int Id { get; set; }


public
string FirstName { get; set; }


public
string City { get; set; }

}

Así luce nuestro proyecto hasta el momento:

Ahora, en nuestro MainPage.xaml agregaremos las siguientes líneas de código, las cuales nos permitirán realizar el databinding con nuestros datos del archivo .XML


<Grid x:Name=”ContentPanel” Grid.Row=”1″ Margin=”12,0,12,0″>


<ListBox x:Name=”lsbData” ItemsSource=”{Binding Users}”>


<ListBox.ItemTemplate>


<DataTemplate>


<StackPanel Orientation=”Vertical” Margin=”10,4″>


<TextBlock Text=”{Binding FirstName}” Style=”{StaticResource PhoneTextTitle1Style}”/>


<TextBlock Text=”{Binding City}” Style=”{StaticResource PhoneTextNormalStyle}” />


</StackPanel>


</DataTemplate>


</ListBox.ItemTemplate>


</ListBox>


</Grid>

Solo nos resta la parte funcional, así que abramos MainPage.xaml.cs, es hora de tirar código.

Iniciemos agregando el siguiente espacio de nombres: using System.Xml.Linq;

Después, dentro del constructor de la clase agreguemos las siguientes líneas especificando como DataContext a la clase misma.

this.DataContext = this;

LoadData();

A continuación agreguemos nuestra dependency property de tipo IList

public
IList<User> Users

{


get { return (IList<User>)GetValue(UsersProperty); }


set { SetValue(UsersProperty, value); }

}

 


public
static
readonly
DependencyProperty UsersProperty =


DependencyProperty.Register(“Users”, typeof(IList<User>), typeof(MainPage), null);

Después crearemos el método para leer el archive XML especificando la ruta de forma relativa “Resources/AppData.xml”


private
void LoadData()

{

XDocument document = XDocument.Load(“Resources/AppData.xml”);

 


if (document != null)

Users = GetUsers(document.Element(“data”).Element(“users”)).ToList();

}

Y por último creemos el método para procesar los elementos del XML y poder ordenarlos.

private
IList<User> GetUsers(XElement element)

{


List<User> users = element.Descendants(“user”).Select(user => new
User()

{

Id = Int32.Parse(user.Element(“id”).Value),

FirstName = user.Element(“firstname”).Value,

City = user.Element(“city”).Value

}).ToList();

 

users.Sort ((x, y) => x.FirstName.CompareTo(y.FirstName));

 


return users;

}

Ahora solo guardemos y compilemos, para observar el resultado:

Aquí el código del ejemplo.

Happy Coding!

Vicente G.
@LucioMSP

Anuncios

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s