Lectura de un archivo xml de manera local en wp

4

Click here to load reader

Transcript of Lectura de un archivo xml de manera local en wp

Page 1: Lectura de un archivo xml de manera local en wp

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.

Page 2: Lectura de un archivo xml de manera local en wp

<?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:

Page 3: Lectura de un archivo xml de manera local en wp

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)

Page 4: Lectura de un archivo xml de manera local en wp

{ 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