15 noviembre 2009

XML y CSharp (C#)

Quen quiera saber que es XML, que lea actualizaciones anteriores o vaya directamente a la Wikipedia. Aquí escribiré cómo desde C# se puede acceder a un archivo escribiendo en él, o para leer. Aunque mi pequeño fracaso, ¿o no?, es que no encontré modo de agregar a un archivo unnuevo registro, sin borrar el contenido actual. Por ello tuve que calentarme la cabeza, y desarrollé dos funciones, una que utilizaba un archivo auxiliar y otra que cargaba en arrays los datos actuales y luego añadia el nuevo registro.


Cómo se lee:


private void LeerFicheroXML()
{
XmlTextReader lectorXML = new XmlTextReader(strRutaDocumentoXML);
StreamReader lector = new StreamReader(strRutaDocumentoXML, System.Text.Encoding.UTF8);
lectorXML.Namespaces = false;
contador = 0;


while (lectorXML.Read())
{
switch (lectorXML.NodeType)
{
case XmlNodeType.Element:
switch (lectorXML.Name)
{
case "NombreRepositorio":
CmbListaRepositorios.Items.Add(lectorXML.ReadString());
contador++;
break;
case "Email":
CmbListaEmails.Items.Add(lectorXML.ReadString());
contador++;
break;
case "Fecha":
break;
contador++;
case "Hora":
contador++;
break;
}
break;
}

}
lectorXML.Close();
lector.Close();


}


Cómo se agregan datos utilizando arrays auxiliares:

private void AgregagandoDatos()

{
contador++;

string[] emails; // Declaración del array
emails = new string[contador]; // Instanciación del array
string[] nombreRepositorios;
nombreRepositorios = new string[contador];
string[] fechas;
fechas = new string[contador];
string[] horas;
horas = new string[contador];
for (int i = 0; i <>
{
fechas[i]="";
horas[i]="";
nombreRepositorios[i]="";
emails[i]="";
}
//declaro el lector y el escritor
XmlTextReader lectorXML = new XmlTextReader(strRutaDocumentoXML);
StreamReader lector = new StreamReader(strRutaDocumentoXML, System.Text.Encoding.UTF8);
lectorXML.Namespaces = false;

try
{
//comienzo la lectura
int ind = 0, indE=0, indN=0, indH=0, indF=0;
while (lectorXML.Read())
{
switch (lectorXML.NodeType)
{
case XmlNodeType.Element:
switch (lectorXML.Name)
{
case "NombreRepositorio":
nombreRepositorios[indN] = lectorXML.ReadString();
indN++;
break;
case "Email":
emails[indE] = lectorXML.ReadString();
indE++;
break;
case "Fecha":
fechas[indF] = lectorXML.ReadString();
indF++;
break;
case "Hora":
horas[indH] = lectorXML.ReadString();
indH++;

break;
}
break;
}

}
lectorXML.Close();
lector.Close();

//y ahora comienzo a escribir en el archivo

XmlTextWriter escritorXML = new XmlTextWriter(strRutaDocumentoXML, Encoding.UTF8);
escritorXML.Formatting = Formatting.Indented;
escritorXML.WriteStartDocument();
ind=0;
while(nombreRepositorios[ind]!="")
{
escritorXML.WriteStartElement("Repositorios");
escritorXML.WriteElementString("NombreRepositorio", nombreRepositorios[ind]);
escritorXML.WriteElementString("Email",emails[ind]);
escritorXML.WriteElementString("Hora", horas[ind]);
escritorXML.WriteElementString("Fecha", fechas[ind]);

ind++;


}
escritorXML.WriteElementString("NombreRepositorio", CmbListaRepositorios.Text);
escritorXML.WriteElementString("Email", CmbListaEmails.Text);
escritorXML.WriteElementString("Hora", GetHora());
escritorXML.WriteElementString("Fecha", GetFecha());
escritorXML.WriteEndElement();
escritorXML.WriteEndDocument();
escritorXML.Flush();
escritorXML.Close();

CmbListaEmails.Items.Add(CmbListaEmails.Text);
CmbListaRepositorios.Items.Add(CmbListaRepositorios.Text);
}
catch (Exception ex)
{
MessageBox.Show("Se produjo el siguiente error: "+ ex.Message + "\n" + ex.InnerException,"Informando", MessageBoxButtons.OK,MessageBoxIcon.Error);


}


}





No hay comentarios:

Publicar un comentario