Neste artigo iremos ver de uma forma exemplificada como utilizar um arquivo XML para armazenar dados e utilizar sua página ASP.NET.

Neste exemplo utilizaremos um arquivo XML de cadastros de Noticias. Nosso XML terá a seguinte estrutura:


<xml version="1.0" encoding="utf-8" ?>
<noticia>
    <noticiaItem id="1">
        <title>Notícia 1</title>
        <description>Texto descritivo da Notícia</description>
        <dataCadastro>09/04/2012</dataCadastro>
        <dataFinal>14/04/2012</dataFinal>
    </noticiaItem>
    <noticiaItem id="2">
        <title>Notícia 2</title>
        <description>Texto descritivo da Notícia</description>
        <dataCadastro>09/04/2012</dataCadastro>
        <dataFinal>14/04/2012</dataFinal>
    </noticiaItem >
        <noticiaItem id="3">
        <title>Notícia 3</title>
        <description>Texto descritivo da Notícia</description>
        <dataCadastro>09/04/2012</dataCadastro>
        <dataFinal>14/04/2012</dataFinal>
    </noticiaItem>
</noticia>
Listagem 1. Código do arquivo XML

Adicione um novo Item do tipo XML e monte o arquivo conforme mostrado acima. Após isso, crie uma nova classe Noticia.cs e utilize o código de exemplo abaixo:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.XPath;
using System.Data;

public class Noticia{
   //Propriedaddes
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public DateTime DataCadastro { get; set; }
    public DateTime DataFinal { get; set; }
    public string Arquivo { get; set; }
    //Construtores
        public Noticia(){    
            Arquivo = "";     
            Title = "";
            Description = "";
        }
        public Noticia(int id, string arquivo){    
            Arquivo = arquivo;
        }
        public Noticia(string arquivo){
            Arquivo = arquivo;
            Title = "";
            Description = "";    
            DataCadastro = DateTime.Now;
        }
    //Método para carregar uma única noticia
    public string carregaNoticia(int id){
        int idNoticia = id;
        // abre o arquivo XML
        XPathDocument xpathDoc = new XPathDocument(Arquivo); 
        // recebe o navigator associado
        XPathNavigator xpathNav = xpathDoc.CreateNavigator();


        // recebe o iterador com os nós que estão de acordo com a expressão XPath
        XPathNodeIterator xpathNodeIter = xpathNav.Select(string.Format("/noticia/
        noticiaItem[@id=0}]/description", idNoticia));
        if  (!xpathNodeIter.MoveNext()){
            return "Não encontrou a notícia !";
        }
        // mostra o conteúdo da tag
        return xpathNodeIter.Current.Value;
         }

    //Método para listar totas todas as noticias.
    public List<Noticia> carregaNoticias(){
        DataSet dtNoticia = new DataSet();

        //Carrega DataSet a partir do XML  
        dtNoticia.ReadXml(Arquivo);

    List<Noticia> listNoticia = new List<Noticia>();

        //faz um loop no DataSet para retornar uma lista de Notícias.

   foreach (DataRow r in dtNoticia.Tables[0].Rows){
           Noticia not = new Noticia();
                not.Title = r["title"].ToString();
                not.Description = r["description"].ToString();
                not.DataCadastro = Convert.ToDateTime(r["dataCadastro"].ToString());
                not.DataFinal = Convert.ToDateTime(r["dataFinal"].ToString());

            listNoticia.Add(not);
        }

        return listNoticia;
   
    }

}
Listagem 2. Classe Notícia

Na página aspx que irá mostrar a listagem adicione um componente literal para mostrarmos as notícias.


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
  <form id="form1" runat="server">
        <div>
               <fieldset>
                   <legend>Notícias<legend>
                   <asp:Literal ID="ltlListagemNoticia" runat="server" />
                </fieldset>
        </div>

  </form>
</body>
</html>
Listagem 3. Adicionando exibição de notícias

No code da página crie o método para listar as Notícias e chame-o no evento PageLoad.


public partial class Default : System.Web.UI.Page{

    protected void Page_Load(object sender, EventArgs e){
        if (!IsPostBack){

            carregaNoticia();
        }


    }

    protected void carregaNoticia(){

        Noticia not = new Noticia(Server.MapPath("~/app_data/noticia.xml"));
        List <Noticia> listNoticia = not.carregaNoticias();

        foreach (Noticia notItem in listNoticia){


            ltlListagemNoticia.Text += "";
            ltlListagemNoticia.Text += "";
            ltlListagemNoticia.Text += notItem.Title;
            ltlListagemNoticia.Text += "";
            ltlListagemNoticia.Text += notItem.Description;
            ltlListagemNoticia.Text += "";
            ltlListagemNoticia.Text += "";
            ltlListagemNoticia.Text += "";
        
        }

    }

}
Listagem 4. Criando o método de listagem

Desta forma você estará exibindo uma listagem de suas notícias armazenadas no xml. Espero que tenham gostado e até o próximo artigo.

Confira também