XML – ASP.Net Actualizar y Borrar Elementos de un Xml

Para esta parte creamos un formulario dentro de nuestro aspx, para nuestro ejemplo utilizamos los siguientes controles: 

Un Label para cargar el Id, dos TextBox y un control Editor de Ajax ToolKit (opcional). Al final le agregamos tres LinkButtons en este ejemplo se llamaran btnUpdate para actualizar o modificar el registro, btnDelete para borrar el registro y btnCancel para cancelar la acción (estos pueden ser también botones o imagenButtons o… etc.). 

 

El codigo es el siguiente: 

Antes que nada debemos asegurarnos que esten referenciados en nuestro aspx.cs
using System.Xml.Linq;
using System.Xml.XPath;
using System.Xml;
using System.Collections.Generic;
using System.IO;
 

Tambien debemos crear en el evento Page_Load
XDocument xmlDoc;
XmlDocument Doc = new XmlDocument();
 

y las variables string SampleID y string SamplePath (para este ejemplo ustedes obviaran o mejoraran esto), que se utilizaran más adelante. 

1. Se crea un método ChargeInfo() para cargar los datos requeridos 

void ChargeInfo()
{           
    var Samples = from c in xmlDoc.Descendants(“Sample”)
                  where c.Attribute(“SampleID”).Value.ToString() == SampleID
                  select new
                  {
                      Name = c.Element(“SampleName”).Value,
                      Date = c.Element(“SampleDate”).Value,
                      Description = c.Element(“SampleDescription”).Value
                   };
 

            foreach(var Sample in Samples)
            {
                txtName.Text = Sample.Name;
                txtDate.Text = Sample.Date;
                txtDescription.Content = Sample.Description;
            }
}
 

En este caso se utiliza las habilidades ninja de Linq para conectarnos con el XML y lo filtramos de acuerdo al Id que seleccionamos asignado a la variable SampleID where c.Attribute(“SampleID”).Value.ToString() == SampleID  Ese SampleID final es la variable string que se creó con anterioridad y que para este ejemplo se le asigna un valor tomado por variable GET con un Response.Query (al final colocaré el código completo y será más claro este punto. Recomiendo que para comprender lo anterior más a fondo investiguen un poco en internet sobre Linq.) 

2. Crear un método UpdateInfo() para ejecutarlo cuando se ejecute el evento del botón correspondiente. 

void UpdateInfo()
{
     XmlNode node;
     node = Doc.DocumentElement;

     foreach(XmlNode node1 in node.ChildNodes)
     {
        if(node1.Attributes[0].Value == SampleID)
        {
            node1.ChildNodes[0].InnerText = txtName.Text;
            node1.ChildNodes[1].InnerText = txtDate.Text;
            node1.ChildNodes[2].InnerText = txtDescription.Content;
        }
     }
     Doc.Save(SamplePath);
}

Doc es la instancia creada de un XmlDocument creado en el Page_Load.

3. Creamos el metodo DeleteInfo() para Borrar registros

void DeleteInfo()
{
    Doc.Load(SamplePath);
    XmlNode node = Doc.SelectSingleNode(“//Samples/Sample[@SampleID=” + SampleID + “]”);
    node.ParentNode.RemoveChild(node);
           
    Doc.Save(SamplePath);
}

El codigo completo es el siguiente:

        string SampleID, SamplePath;
        XDocument xmlDoc;
        XmlDocument Doc = new XmlDocument();

        protected void Page_Load(object sender, EventArgs e)
        {
            SampleID = Request.QueryString[“SampleID”];
            lblSampleID.Text = SampleID;
            SamplePath = MapPath(“~/App_Data/Samples.xml”);
            xmlDoc = XDocument.Load(SamplePath);
            Doc.Load(SamplePath);

            if(!IsPostBack)
                ChargeInfo();
        }

        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            UpdateInfo();
        }

        void ChargeInfo()
        {           
            var Samples = from c in xmlDoc.Descendants(“Sample”)
                        where c.Attribute(“SampleID”).Value.ToString() == SampleID
                        select new
                        {
                            Name = c.Element(“SampleName”).Value,
                            Date = c.Element(“SampleDate”).Value,
                            Description = c.Element(“SampleDescription”).Value
                        };

            foreach(var Sample in Samples)
            {
                txtName.Text = Sample.Name;
                txtDate.Text = Sample.Date;
                txtDescription.Content = Sample.Description;
            }
        }

        void UpdateInfo()
        {
            XmlNode node;
            node = Doc.DocumentElement;

            foreach(XmlNode node1 in node.ChildNodes)
            {
                if(node1.Attributes[0].Value == SampleID)
                {
                    node1.ChildNodes[0].InnerText = txtName.Text;
                    node1.ChildNodes[1].InnerText = txtDate.Text;
                    node1.ChildNodes[2].InnerText = txtDescription.Content;
                }
            }
            Doc.Save(SamplePath);
        }

        void DeleteInfo()
        {
            Doc.Load(SamplePath);
            XmlNode node = Doc.SelectSingleNode(“//Samples/Sample[@SampleID=” + SampleID + “]”);
            node.ParentNode.RemoveChild(node);
           
            Doc.Save(SamplePath);
            CleanText();
        }

        protected void btnDelete_Click(object sender, EventArgs e)
        {
            DeleteInfo();
        }

        void CleanText()
        {
            txtName.Text = “”;
            txtDate.Text = “”;
            txtDescription.Content = “”;
        }

Las mejoras y los comentarios al anterior codigo van por cuenta de ustedes.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

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

A %d blogueros les gusta esto: