Buscar

Cargando...

jueves, 26 de junio de 2008

Leer y modificar un XML desde C# .NET

Este código muestra una forma fácil de leer y modificar un
archivo XML desde .NET , utilizando un DataSet.

Espacio de nombres “System.Data”

Archivo XML (Config.xml)
-----------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<config>
<asesor>
<cedula>123456</cedula>
<email>jaas.jaas@gmail.com</email>
</asesor>
</config>

----------------------------------------------------------

Código:

using System.Data;

public
static void LeerYModificarXML()
{
/*********Para leer un valor*********************/

DataSet ds = new DataSet();//Se crea un dataset
ds.ReadXml("Config.xml");//Dirección del archivo xml
string Valor = ds.Tables["asesor"].Rows[0]["cedula"].ToString(); //Leemos el primer valor (Rows[0])

/*******Para Guardar un valor*******************/

ds.Tables["asesor"].Rows[0]["cedula"] = Valor; // Modificar un valor
ds.WriteXml("Config.xml"); // Guardamos las modificaciones

}

10 comentarios:

  1. Hola maestro, ya ha pasado largo tiempo desde este ejemplo, pero necesito hacerte una pregunta con la sigueinte linea puedes leer el primer registro del xml..
    string Valor = ds.Tables["asesor"].Rows[0]["cedula"].ToString(); //Leemos el primer valor (Rows[0])
    la pregunta del millon es como puedo recorrer todos los registros del xml.
    ojala te puedas hacer el tiempo para responder.
    saludos y gracias de antemano
    Esteban.

    ResponderEliminar
  2. Esteban, al cargar un xml en un dataSet queda como si fuera una base de datos, entonces si quieres leer todos los registros de ese nodo vasta con hacer un ciclo ejemplo:
    for(int i=0;i<=ds.Tables["asesor"].Rows.Count;i++)
    {
    tring Valor = ds.Tables["asesor"].Rows[i]["cedula"].ToString()
    }
    aquí leeríamos todas las cédulas que hay en el nodo asesores; si quisiéramos leer el mail pues simplemente cambiamos Rows[i]["cedula"] por Rows[i]["email"], ahora si hubiera mas nodos fuera del nodo asesor, entonces estos se comportan como si fueran las tablas entonces para leer otro nodo(en caso de de exista por ejemplo el nodo cliente)




    123456
    jaas.jaas@gmail.com


    222222
    jaas.jaas2@gmail.com




    entonces se leería así :
    for(int i=0;i<=ds.Tables["Cliente"].Rows.Count;i++)
    {
    tring Valor = ds.Tables["Cliente"].Rows[i]["cedula"].ToString()
    }


    espero quede resuelta tu duda.

    ResponderEliminar
  3. Hola Jaas, estoy realizando pruebas con los ciclos, pero me sale el siguiente error:

    No hay ninguna fila en la posición 2.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    el ejemplo lo estoy mandando a llamar desde un boton.


    protected void Button5_Click(object sender, EventArgs e)
    {
    DataSet ds = new DataSet();//Se crea un dataset
    ds.ReadXml(@"c:\paso.xml");//Dirección del archivo xml
    for(int i=0;i<=ds.Tables["asesor"].Rows.Count;i++)
    {
    string Valor = ds.Tables["asesor"].Rows[i]["cedula"].ToString();

    Response.Write(Valor);
    //aca mando un alert pero no me deja poner el script

    }
    }


    y el xml esta de la siguiente forma.




    987654
    jaas.jaas@gmail.com


    123456
    estebane@gmail.com



    ojala puedes indicarme donde puede estar el error.
    saludos y grcias.
    Esteban

    ResponderEliminar
  4. Esteban ... ciertamente hay un error porque el ciclo debe ser: for(int i=0;i<ds.Tables["asesor"].Rows.Count;i++)

    for(int i=0;i<ds.Tables["asesor"].Rows.Count;i++)
    {
    string Valor = ds.Tables["asesor"].Rows[i]["cedula"].ToString();

    Response.Write(Valor);
    //aca mando un alert pero no me deja poner el script

    }

    ya que Rows.Count empieza a contar los elementos desde 1 y el indice de las tablas empieza desde 0

    Espero ahora si quede resuelto el problema, si no vuelve a comentar
    Suerte.

    ResponderEliminar
  5. Jaas, Muchas gracias por tu ayuda ya estoy recorreindo el xml y comparando la informacion contra una base de datos.
    saludos.
    Esteban!

    ResponderEliminar
  6. Gracias Flaco. Me salvaste, Espero algún día poder devolver lo q vos me diste hoy. Hugo

    ResponderEliminar
  7. Hola jaas y si alguna de las etiquetas tuviera un atributo? como leo la información de ese atributo?

    ResponderEliminar
  8. como adicionar un atributo a una etiqueta xml desde c#

    ResponderEliminar
  9. Puede leer el xml como se muestra en el ejemplo, y después agregarle una columna a la tabla y guardar de nuevo el dataset como xml.

    ResponderEliminar
  10. hola, quisiera ver si me pudiera ayudar con una duda, como puedo obtener los valores de etiquetas dentro de etiquetas?? usando su ejemplo, seria usar los campos 'opcion1' y 'opcion2' que corresponden a email.

    <* email>
    <*opcion1>opcion1@ejemplo.com<*/opcion1>
    <*opcion2>opcion2@ejemplo.com<*/opcion2>
    <* /email>

    ResponderEliminar