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
}
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..
ResponderEliminarstring 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.
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:
ResponderEliminarfor(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.
Hola Jaas, estoy realizando pruebas con los ciclos, pero me sale el siguiente error:
ResponderEliminarNo 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
Esteban ... ciertamente hay un error porque el ciclo debe ser: for(int i=0;i<ds.Tables["asesor"].Rows.Count;i++)
ResponderEliminarfor(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.
Jaas, Muchas gracias por tu ayuda ya estoy recorreindo el xml y comparando la informacion contra una base de datos.
ResponderEliminarsaludos.
Esteban!
Gracias Flaco. Me salvaste, Espero algún día poder devolver lo q vos me diste hoy. Hugo
ResponderEliminarHola jaas y si alguna de las etiquetas tuviera un atributo? como leo la información de ese atributo?
ResponderEliminarcomo adicionar un atributo a una etiqueta xml desde c#
ResponderEliminarPuede 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.
ResponderEliminarhola, 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.
ResponderEliminar<* email>
<*opcion1>opcion1@ejemplo.com<*/opcion1>
<*opcion2>opcion2@ejemplo.com<*/opcion2>
<* /email>
Hola, me topé con un problema a la hora de escribir en el archivo XML.
ResponderEliminarCuando leeo el archivo, este requiere que use la siguiente sentencia
DataSet elxml = new DataSet();
elxml.ReadXml("//storage//self//primary//Configuracion.xml");
string DirFileXML = elxml.Tables["Configuracion"].Rows[0]["WebService"].ToString();
y obtengo el valor sin problemas pero a la hora de intentar realizar una escritura de algún cambio como este en ejemplo:}
elxml.Tables["Configuracion"].Rows[0]["WebService"] = etDireccionWS.Text;
elxml.WriteXml("//storage//self//primary//Configuracion.xml");
este marca el siguiente erro:
e.Message = "Access to the path \"/storage/self/primary/Configuracion.xml\" is denied."
¿que me sugieren al respecto?
Saludos.
Jejejejeje ya encontré yo la solución a mi problema y es la aparentemente mas fácil.
Eliminarde usar el path: //storage//self//primary//Configuracion.xml
es mejor invocar al path así
string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal).ToString();
la cual es /data/user/0/XXXX.XXXX/files
Solo alojas el archivo en esta ubicación y listo ya puedes interactuar con el sin problemas.
Apollence con el device monitor y usen un Toast.MakeText para saber donde esta su path de su proyecto.
Estimados:
ResponderEliminarCómo se verifica que el método WriteXML finalizó con éxito?
Excelente aporte..!!!! Gracias TOTALES.....
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarBuenos días
ResponderEliminarPodrían por favor decirme como puedo modificar o incluir un elemento mas a un xml
Necesito incluir el namespace NumOperacion
Como comentario es un complemento de pago
Gracias por sus atenciones y pronta ayuda
Este comentario ha sido eliminado por el autor.
ResponderEliminarModificar XML del Complemento de pago
ResponderEliminarNecesito agregar el elemento NumOperacion al Complemento de Pago
Soy nuevo en esto de los xml y necesito editar el Complemento de Pago y agregar el campo NumOperacion
Este es un ejemplo de como debe de quedar
(
)
Saludos y gracias!!!
Nota: no me explico porque no se visualiza la estructura del xml que quiero modificar