Xamarin Forms - Fazendo o Parser em arquivos XML

 Neste tutorial veremos como fazer o parser em arquivos XML usando o Xamarin Forms.

Eu já tratei do acesso a arquivos usando a PCL Storage neste artigo aqui.

Hoje vou mostrar como fazer uma análise ou parser de arquivos XML, acessando e exibindo as informações neles contidas.

Vamos supor que temos um arquivo XML com o seguinte conteúdo:

<?xml version="1.0" encoding="utf-8" ?> 
<ArrayOfCliente xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Cliente>
    <Id>100</Id>
    <Nome>Macoratti</Nome>
    <Origem>Brasil</Origem>   
  </Cliente>
  <Cliente>
    <Id>200</Id>
    <Nome>Yuri</Nome>
    <Origem>Russia</Origem>   
  </Cliente>
  <Cliente>
    <Id>300</Id>
    <Nome>Jessica</Nome>
    <Origem>Inglaterra</Origem>
  </Cliente>
  <Cliente>
    <Id>400</Id>
    <Nome>Evelyn</Nome>
    <Origem>USA</Origem>   
  </Cliente>
  <Cliente>
    <Id>500</Id>
    <Nome>Marisa</Nome>
    <Origem>Argentina</Origem>    
  </Cliente>
</ArrayOfCliente>

Nosso objetivo é acessar e exibir o contéudo do arquivo em um controle ListView no Xamarin Forms.

Pois, bem , desafio aceito, vamos lá...

recursos usados:

Criando o projeto Xamarin Forms

Abra o  VS 2017 Community e clique em New Project e a seguir escolha Cross Platform -> Mobile App (Xamarin.Forms) e informe o nome XF_ParseXML;

A seguir selecione a Plataforma (eu marquei somente Android) e escolha a estratégia de compartilhamento que será .NET Standard.

Clique no botão OK.

Pronto, nosso projeto já esta criado.

Criando o arquivo XML e a classe Cliente

Vamos criar uma pasta chamada Recursos no projeto compartilhado e nesta pasta criar o arquivo XML Clientes.xml com o conteúdo já exibido no início do arquivo.

O detalhe é que precisamos alterar a propriedade Build Action do arquivo para Embedded resource.

Agora vamos criar uma pasta Model no projeto compartilhado e nesta pasta criar a classe Cliente que vai representar um cliente:

   public class Cliente
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Origem { get; set; }
        public Cliente()
        {}
    }
}

Criando a interface com o usuário no arquivo MainPage

Abra o arquivo MainPage.xaml e incluia o código abaixo que define um ListView para exibir os dados dos clientes:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XF_ParseXML"
             x:Class="XF_ParseXML.MainPage">
    <ListView x:Name="lvClientes" HasUnevenRows="true" BackgroundColor="White">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding Nome}" Detail="{Binding Origem}" TextColor="Black" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage>

 

No código estamos usando um ItemTemplate definindo um DataTemplate do tipo TextCell e exibindo o nome a origem do cliente.

No arquivo code-behind MainPage.xaml.cs inclua o código a seguir:

using System.Collections.ObjectModel;
using System.IO;
using System.Reflection;
using System.Xml.Serialization;
using Xamarin.Forms;
using XF_ParseXML.Model;
namespace XF_ParseXML
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            var assembly = typeof(MainPage).GetTypeInfo().Assembly;
            Stream stream = assembly.GetManifestResourceStream("XF_ParseXML.Recursos.Clientes.xml");
            ObservableCollection<Cliente> ClientesInfo;
            var serializer = new XmlSerializer(typeof(ObservableCollection<Cliente>));
            ClientesInfo = (ObservableCollection<Cliente>)serializer.Deserialize(stream);
            lvClientes.ItemsSource = ClientesInfo;
        }
    }
}

Neste código acessamos o arquivo Clientes.xml da pasta Recursos e deserializamos as informações objetos do tipo Cliente atribuindo à propriedade ItemsSource do ListView.

O método GetManifestResourceStream carrega o recurso (o XML) de manifesto especificado desse assembly.

E a classe XmlSerializer permite serializar e desserializar objetos de e para documentos XML.

Executando o projeto iremos obter o seguinte resultado:

Assim, conseguimos acessar o arquivo XML e exibir os dados no Xamarin Forms.

Pegue o código do projeto compartilhado aqui :  XF_ParseXML.zip

(disse Jesus) - "E a vida eterna é esta: que te conheçam, a ti só, por único Deus verdadeiro, e a Jesus Cristo, a quem enviaste."
João 17:3

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti