Para eso necesitaremos los siguientes elementos:
"FileUpload"
"Button"
"GridView"
"Panel"
"Label"
El "FileUpload" nos servirá para leer los archivos XML, el "Button" ejecutara el proceso para leer los datos, en el "Gridview" vamos a mostrar los datos que recuperaremos de nuestro archivo y en el "Panel" meteremos el "Label" para mostrar algún tipo de error que nos mande el proceso.
Nuestra pantalla quedará así:
Dentro del código, en el Page_Load vamos a poner nuestro "Panel" como invisible, para que solo aparezca cuando mandemos un mensaje, en mi caso sea así "Panel4.Visible = false;".En el diseño le damos doble click al "Button" para que nos genere el evento "Click", vamos a generar 2 eventos, uno para borrar los archivos que estén en el directorio donde almacenaremos los XML(para esto vamos a crear una carpeta en nuestro proyecto que se llamará: ArchivosXML), que vamos a leer y otro para hacer la lectura.
El evento para borrarlos será el siguiente:
private void borrarArchivos()
{
try
{
Panel3.Visible = false;
Panel3.Visible = false;
string sourceDir = (Server.MapPath("~/ArchivosXML/"));
string[] txtList = Directory.GetFiles(sourceDir, "*.xml");
foreach (string f in txtList)
{
File.Delete(f);
}
}
catch (Exception ex)
{
Panel4.Visible = true;
Label1.Text = ex.Message.ToString();
}
}
Y el evento para hacer la lectura nos quedará de la siguiente forma:
private void cargaArchivos()
{
if (FileUpload1.HasFile)
{
DateTime fechaVar = DateTime.Now;
string foliovar = " ";
string serievar = "";
Decimal totalvar = 0;
DataTable dt = new DataTable();
dt.Columns.Add("fFecha");
dt.Columns.Add("cFolio");
dt.Columns.Add("cSerie");
dt.Columns.Add("mTotal");
DataRow dr;
DataSet ds = new DataSet();
ds.Tables.Add(dt);
FileUpload1.SaveAs(Server.MapPath("~/ArchivosXML/") + FileUpload1.FileName);
XmlTextReader reader = new XmlTextReader((Server.MapPath("~/ArchivosXML/")) + FileUpload1.FileName.ToString());
XDocument docContactos = XDocument.Load((Server.MapPath("~/ArchivosXML/")) + FileUpload1.FileName.ToString());
string Archivo = (Server.MapPath("~/ArchivosXML/")) + FileUpload1.FileName.ToString();
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
try
{
XmlDocument DocumentXml = new XmlDocument();
DocumentXml.Load(Archivo);
XmlNodeList Documento = DocumentXml.GetElementsByTagName(reader.Name);
int i = 0;
foreach (XmlElement nodoDocumento in Documento)
{
if (reader.Name.Contains("Comprobante"))
{
if (Documento[i].Attributes["fecha"] != null)
{
fechaVar = Convert.ToDateTime(Documento[i].Attributes["fecha"].Value.Substring(0, 10));
if (Documento[i].Attributes["total"] != null)
{
totalvar = Convert.ToDecimal(Documento[i].Attributes["total"].Value);
}
}
}
if (reader.Name.Contains("Comprobante"))
{
if (Documento[i].Attributes["folio"] != null)
{
foliovar = Documento[i].Attributes["folio"].Value;
}
if (Documento[i].Attributes["serie"] != null)
{
serievar = Documento[i].Attributes["serie"].Value;
}
i++;
}
}
}
catch (Exception ex)
{
Panel4.Visible = true;
Label1.Text = ex.Message.ToString();
}
break;
}
}
dr = dt.NewRow();
dr["cFolio"] = foliovar;
dr["cSerie"] = serievar;
dr["mTotal"] = totalvar.ToString();
dr["fFecha"] = fechaVar.ToShortDateString();
dt.Rows.Add(dr);
GridView1.DataSource = ds;
GridView1.DataBind();
reader.Close();
//validaEmpresa();
if (System.IO.File.Exists(Archivo))
{
try
{
System.IO.File.Delete(Archivo);
}
catch (System.IO.IOException e)
{
Panel4.Visible = true;
Label1.Text = e.Message.ToString();
}
}
}
else
{
Panel4.Visible = true;
Label1.Text = "Seleccione un archivo XML para llevar a cabo el proceso";
}
}
El evento que se genero al darle doble click a nuestro "Button", quedará así:
protected void Button1_Click(object sender, EventArgs e)
{
borrarArchivos();
cargaArchivos();
}
Ahora si vamos a ejecutar nuestra aplicación web para ver como se ve y, lo mas importante, ver que funcione realmente.
Así se ve:
Le damos un click en Examinar para que nos abra le cuadro para seleccionar los archivos:
Ya tenemos seleccionado nuestro XML:
Y ahora le daremos click al botón de cargar y veremos el resultado:
En el "GridView" se muestran los datos que leímos del XML.
Les dejo el link del ejemplo para que puedan descargarlo.
Como siempre, espero y les sirva de algo mi experiencia, les dejo a su disposición mi correo para cualquier duda, aclaración o sugerencia, ricegamo@hotmail.com
Saludos