 |
|
 |
|
Como leer XML con C#
La importancia de XML en la informática actual está fuera de cualquier tipo de duda. Dentro de la plataforma .NET XML tiene un papel principal, gran parte de la architectura de .NET trabaja internamente con XML, ADO.NET, WebServices, SOAP, ASP.NET ...
Otro de los papeles principales de la plataforma .NET corresponde a C#.Por este motivo es fundamental para cualquier programador de C# conocer y utilizar las clases que permiten leer y manipular archivos XML.
La plataforma .NET ofrece una nueva interfaz de acceso a datos XML, el namespace System.XML, que sustituye a la anterior interfaz de Microsoft, SAX, aunque se puede continuar utilizando agregando una referencia a MSXML3.DLL en nuestro proyecto, si bien SAX es una interfaz basada en COM por lo necesitariamos crear una ensamblado de interoperatividad.
Este articulo esta orientado a la lectura de un archivo XML desde C# con las clases de System.XML, usando código controlado. Se supone que el lector tiene un conocimiento mínimo de XML.
Supongamos un fichero XML como este, llamado personas1.xml, en el que se define una estructura de personas, compuesta por nodos persona, con nombre, apellido1 y apellido2
<?xml version="1.0" encoding="UTF-8"?>
< personas>< persona>< nombre>Devjoker!</nombre>< apellido1>El apellido de Devjoker</apellido1>< apellido2>El segundo apellido de Devjoker</apellido2>
</persona> <persona> <nombre>Otra persona</nombre> <apellido1>Apellido 1 de otra persona</apellido1> <apellido2>Apellidos 2 de otra persona</apellido2>
</persona> </personas> |
Si analizamos un poco el documento XML veremos que tenemos un nodo principal, <personas>, de este nodo dependen dos nodos <persona> , del que a su vez dependen los nodos <nombre>, <apellido1>,<apellido2> .
Lo primero que debemos hacer es importar el namespace System.Xml que contiene las clases que nos van a servir para trabajar con el documento XML.
A continuación tenemos un ejemplo de código para leer el fichero desde c#, lógicamente la ruta del fichero está referida a mi equipo de trabajo, por lo que debemos cambiarla ...
using System;
using System.Xml;namespace xmltest{ class Program{ static void Main(string[] args){ XmlDocument xDoc = new XmlDocument();//La ruta del documento XML permite rutas relativas //respecto del ejecutable!xDoc.Load( "../../../../personas1.xml"); XmlNodeList personas = xDoc.GetElementsByTagName("personas");XmlNodeList lista = ((XmlElement)personas[0]).GetElementsByTagName("persona"); foreach (XmlElement nodo in lista){ int i=0;XmlNodeList nNombre = nodo.GetElementsByTagName("nombre");XmlNodeList nApellido1 = nodo.GetElementsByTagName("apellido1");XmlNodeList nApellido2 = nodo.GetElementsByTagName("apellido2");Console.WriteLine("Elemento nombre ... {0} {1} {2}", nNombre[i].InnerText, nApellido1[i].InnerText, nApellido2[i++].InnerText);} } } }
|
Vamos a comentar un poco el código. La primera clase de la que vamos a hablar es XmlDocument. La clase XmlDocument representa el documento XML y dispone de un método Load para cargar el documento desde un archivo, una secuencia o un XmlReader. En nuestro ejemplo hemos utilizado el método que recibe un archivo como parámetro (la ruta está referida de forma relativa al directorio donde se ejecuta el exe). La clase XmlDocument es una implementación del modelo de objetos de documentos (DOM) del W3C. El W3C es el organismo que regula el estandar XML.
El siguiente fracmento de código ilusta la carga del documento XML en el objeto XDoc, instancia de XmlDocument.
XmlDocument xDoc = new XmlDocument();
//La ruta del documento XML permite rutas relativas //respecto del ejecutable! xDoc.Load( "../../../../personas1.xml");
|
A continuación invocamos al método GetElementsByTagName de la instancia de XmlDocument para obtener un objeto XmlNodeList. Este método devuelve una coleccion de objetos XmlNode. Cada objeto XmlNode representa un nodo del documento XML.
Una vez que tenemos el nuestra referencia al nodo de personas, obtenemos un nuevo XmlNodeList, con todos los nodos persona dependientes del nodo personas. Recorremos este nuevo nodo mostrando por pantalla el contenido de los nodos nombre, apellido1 y apellido2.
XmlNodeList personas = xDoc.GetElementsByTagName("personas");
XmlNodeList lista = ((XmlElement)personas[0]).GetElementsByTagName("persona"); foreach (XmlElement nodo in lista) { int i=0; XmlNodeList nNombre = nodo.GetElementsByTagName("nombre"); XmlNodeList nApellido1 = nodo.GetElementsByTagName("apellido1"); XmlNodeList nApellido2 = nodo.GetElementsByTagName("apellido2"); Console.WriteLine("Elemento nombre ... {0} {1} {2}", nNombre[i].InnerText, nApellido1[i].InnerText, nApellido2[i++].InnerText); }
|
Como podemos ver el ejemplo es muy sencillo, y solo ofrece una aproximación a lo que nos ofrece el namespace System.XML.
Otra forma en la que habitualmente se escriben los fichero XML es en filas. El mismo fichero anterior pero expresado en filas tendría el siguiente aspecto. Lo guardaremos como
<?xml version="1.0" encoding="UTF-8" ?>
<personas> <persona nombre="Devjoker" apellido1="El apellido1" apellido2="El apellido1" /> <persona nombre="Otro nombre" apellido1="Otro apellido1" apellido2="Otro apellido2" />
</personas>
|
El siguiente programa es una adaptación del anterior para tratar el documento XML personas2.xml. La única diferencia con el programa anterior radica en que antes, el nombre y apellidos se exponian como nodos, y en este como atributos, por lo que el método utilizado para su lectura es GetAttribute en lugar de GetElementsByTagName.
using System;
using System.Xml;namespace xmltest{ class Program{ static void Main(string[] args){ XmlDocument xDoc = new XmlDocument();//La ruta del documento XML permite rutas relativas //respecto del ejecutable!xDoc.Load( "../../../../personas2.xml"); XmlNodeList personas = xDoc.GetElementsByTagName("personas");XmlNodeList lista = ((XmlElement)personas[0]).GetElementsByTagName("persona"); foreach (XmlElement nodo in lista){ string nNombre = nodo.GetAttribute("nombre"); //.GetElementsByTagName("nombre");string nApellido1 = nodo.GetAttribute("apellido1");string nApellido2 = nodo.GetAttribute("apellido2");Console.WriteLine("Elemento nombre ... {0} {1} {2}", nNombre, nApellido1,nApellido2);} } } }
|
Espero que este articulo os sirva de introducción al namespace System.XML y el uso de C# con XML.
Saludos, DJK |
| |
 |
http://putxi.wordpress.com
por
The Putxi Project
Respuesta recibida el [03/04/2007 08:04:57]
|
 |
genial el codigo, me ha sido muy útil. He investigado en otras webs como hacer un reemplazar child. pongo el codigo por si es de utilidad a alguien:
XmlDocument doc = new XmlDocument(); XmlNode currNode = doc.DocumentElement; XmlElement newElem=doc.CreateElement("jmeno"); newElem.InnerText="Interval"; currNode.FirstChild.AppendChild(newElem);
|
| |
 |
Pregunta?
por
William P
Respuesta recibida el [01/06/2007 08:24:52]
|
 |
hay esta el codigo para cargarlo y pues estaria bien pero que pasa si en el archivo xml no existiesen datos??? mi pregunta es como puedo hacer para validar que el documento xml si tenga datos ??
|
| |
 |
leer xml en asp
por
elgame
Respuesta recibida el [27/06/2007 10:03:29]
|
 |
mepodrian decir como ler el xml pero desde asp
|
| |
 |
Gracias
por
Williams Molina
Respuesta recibida el [27/06/2007 10:54:52]
|
 |
Gracias Pedro, me ha servido para iniciarme en el uso del System.XML.
Saludos
|
| |
 |
muchas gracias, me ha resultad...
por
agradecida
Respuesta recibida el [06/07/2007 01:37:40]
|
 |
muchas gracias, me ha resultado muy útil :) Saludos
|
| |
 |
Visual C++ 6.0
por
yeni
Respuesta recibida el [06/07/2007 02:25:34]
|
 |
Hola, esta interesante, pero please, alguien me podria decir como leer el xml pero desde Visual C++ 6.0
|
| |
 |
Ayuda
por
Gis
Respuesta recibida el [09/09/2007 06:17:26]
|
 |
Alguien me podria explicar como le puedo cambiar el look & feel de un tabcontrol con c#?
|
| |
 |
Gracias
por
ppk
Respuesta recibida el [25/09/2007 04:22:19]
|
 |
Me ha sido de mucha utilidad. Claro, rápido y conciso
|
| |
 |
comentario
por
cesar carrasquel
Respuesta recibida el [14/02/2008 09:55:15]
|
 |
articulo 100% util y funcional
|
| |
 |
Gracias por la ayuda
por
BorisMan
Respuesta recibida el [13/03/2008 06:55:04]
|
 |
gracias por la ayuda jdk
|
| |
 |
Pregunta
por
Jozet77
Respuesta recibida el [11/04/2008 12:23:01]
|
 |
Muy bien la guia, pero y si quiero editar el documento xml.
|
| |
 |
Manejar TimeOut con XmlDocument
por
loconelson
Respuesta recibida el [25/04/2008 09:31:02]
|
 |
Muchas gracias por el artículo, tengo un problema, estoy tratando de abrir un Xml desde una URL, pero esta URL tarda demasiado en abrir (ya que se abre dinámicamente con un proceso interno en su servidor); el URL puede tardar hasta 5 minutos en abrir. ¿Cómo puedo ejecutar el Load() de éste Xml sin que me de TimeOut?
Gracias de antemano
|
| |
 |
leer xml con c#
por
Omar Daniel Peña
Respuesta recibida el [03/06/2008 06:50:03]
|
 |
Amigo, de verdad le doy las gracias porque ya llevaba buen tiempo buscando este codigo especificamente. De verdad le agradezco
|
| |
 |
Leer XML de inicio a fin
por
Kevin
Respuesta recibida el [27/06/2008 08:13:21]
|
 |
Que tal, esta genial el artículo, solo que yo estoy tratando de leer un XML de un blog, pero al pasarlo a un textbox me retorna la entrada mas antigua, o mejor dicho la última del XML, como hago para leer los primeros datos?
gracias.
|
| |
 |
Manipular Appconfig
por
George
Respuesta recibida el [17/07/2008 12:22:16]
|
 |
Me preguntaba si se puede manipular de la misma manera que el XML a el archivo de configuracion app.config
|
| |
 |
wrong code
por
Dani
Respuesta recibida el [29/07/2008 04:34:06]
|
 |
line: int i=0; should be before the line of foreach, and not after.......
|
| |
 |
Not Wronf for Dani
por
Devjoker
Respuesta recibida el [30/07/2008 08:46:00]
|
 |
The code is fine. i is used only inside of foreach.
|
| |
 |
Alguien me podria ayudar por favor
por
Carlos Mosqueira
Respuesta recibida el [07/09/2008 01:15:51]
|
 |
Lo que pasa que tengo que leer un archivo xml con pl/sql. Agradeceria su ayuda.
|
| |
 |
Gracias
por
Toto Murillo
Respuesta recibida el [17/09/2008 06:17:33]
|
 |
Gracias por la ayuda. Muy util tu codigo. Un saludo.
|
| |
 |
gracias,,,...
por
Fernando
Respuesta recibida el [25/09/2008 03:41:35]
|
 |
gracias,,,
|
| |
 |
Gracias
por
Andres Sierra
Respuesta recibida el [30/09/2008 07:24:00]
|
 |
Me sirvio mucho
|
| |
 |
un error
por
oscar
Respuesta recibida el [15/10/2008 05:29:06]
|
 |
gracias me ayudaste mucho, solo que tal y como dijo el amigo gringo int i=0;
tiene que estar antes de foreach, tomenlo en cuenta.
|
| |
 |
Xml remoto
por
Jose Huaraya
Respuesta recibida el [15/10/2008 09:31:32]
|
 |
Felicitaciones por el articulo, mi duda es como podria cargar un xml que está en un hosting http://jahc.byethost18.com/personas2.xml para que pueda ser leida desde el c#
|
| |
 |
para Jose Huaraya
por
Tomas
Respuesta recibida el [05/11/2008 08:10:12]
|
 |
http://msdn.microsoft.com/es-es/library/aa287537(VS.71).aspx
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader("url");
|
| |
 |
Gracias
por
Soraya
Respuesta recibida el [18/11/2008 05:28:23]
|
 |
Gracias por esta introducción, es sencilla y demasiado útil.
|
| |
 |
Gracias
por
NJ
Respuesta recibida el [08/01/2009 09:09:06]
|
 |
Explicas de manera sencilla como leer los xml. Muy útil.
gracias.
|
| |
 |
Excelente
por
Alan
Respuesta recibida el [16/01/2009 01:42:25]
|
 |
Muy Buena tu Explicacion de como leer un Xml. Me resulto muy útil. Gracias.
|
| |
 |
Excelcente
por
Fer
Respuesta recibida el [26/01/2009 10:39:44]
|
 |
Muy sencillo, práctico y claro.
|
| |
 |
Thanks
por
Mirren de Abia
Respuesta recibida el [05/02/2009 10:11:07]
|
 |
Cool! Sigue asi.
|
| |
 |
Muchas Gracias
por
Diego
Respuesta recibida el [20/02/2009 04:12:37]
|
 |
Muchisimas gracias por compartir tu conocimiento.
|
| |
 |
bueno
por
maicon
Respuesta recibida el [14/03/2009 12:07:45]
|
 |
muy bueno excelente lo que buscaba exacto presiso y sin tanto cosa
|
| |
 |
esta muy bien
por
verooxx
Respuesta recibida el [17/03/2009 10:03:16]
|
 |
esta muy bien pero como puedo crear un archivo xml?
|
| |
 |
GRACIAS
por
Cuauhtemoc
Respuesta recibida el [06/05/2009 11:58:37]
|
 |
Esta genial el ejemplo que escribiste, ya lo probé y funciona a la prefección, ahora debo adentrarme mas en el tema, pero con este ejemplo de inicio es fácilo comenzar a manejar XML desde c#.
|
| |
 |
Chicloso
por
Eibel
Respuesta recibida el [28/07/2009 11:26:22]
|
 |
Muchas gracias por el intro, me sirvio de mucho para comenzar con C# y XML, y quisiera preguntarte con respecto al performance, esta es la mejor practica para realizar un recorrido en un xml??
Saludos!!
|
| |
 |
Chicloso, está no es la manera...
por
Devjoker
Respuesta recibida el [28/07/2009 05:04:27]
|
 |
Chicloso, está no es la manera más rápida de acceder a XML, pero si muestra claramente el modelo de objetos. Para obtener un mejor rendimiento utiliza consultas XPATH o XQUERY, y si trabajas con .NET 3.5 usa Linq To XML
|
| |
 |
Excelente
por
David
Respuesta recibida el [01/10/2009 12:14:28]
|
 |
Permiteme decirte que el matrial esta excelente, muchas gracias por la ayuda.
|
| |
 |
Ejemplo sencillo y muy claro
por
Josue
Respuesta recibida el [02/10/2009 05:12:25]
|
 |
gracias chaval en todas...
|
| |
 |
Permisos de Escritura a xml en godaddy
por
Signor Gabriel
Respuesta recibida el [13/10/2009 11:31:08]
|
 |
Que tal colegas, bueno yo acabo de hacer una galeria flash dinamica con webservices, c# y flash. Tengo un proceso en el cual edito el contenido del xml dependiendo de la consulta que haga, Correcto pero la sorpresa fue al subir mi pagina Godaddy al parecer necesito permisos para poder escribir en el xml y hasta ahora no he podido solucionarlo, alguien podria decirme que puedo hacer??? Godaddy no me permite darle permisos de escritura lo puedo hacer por medio de codigo c#????????
|
| |
 |
Siempre que escribas un ficher...
por
devjoker
Respuesta recibida el [14/10/2009 03:37:09]
|
 |
Siempre que escribas un fichero - sea xml o cualquier otra cosa - necesitas los permisos adecuados. ASP.NET se ejecuta por defecto bajo la cuenta NETWORK SERVICE - es esa cuenta la que debe tener permisos de escritura sobre el directorio de generacion.
Tambien puedes impersonar el usuario que ejecuta el código - hay varias formas de hacerlo pero sin duda lo mas comodo es a través del web.config
Mira este link:http://209.200.119.101/Articulos/Articulo.aspx?ID=15
|
| |
 |
Permisos de Escritura a xml en godaddy
por
Signor Gabriel
Respuesta recibida el [14/10/2009 12:13:20]
|
 |
Que tal le cuento que despues de haber moneado en las opciones de godaddy, especificamente en el ISS Management, le di click a Recycle App pool, le di permisos de escritura y lectura al Root de mi sitio, y aumente el tag de impersonate= true y funciono.... Graciasss
|
| |
 |
Según parece has elevado la se...
por
devjoekr
Respuesta recibida el [14/10/2009 02:37:12]
|
 |
Según parece has elevado la seguridad para todo el site, la recomendacion es tener el nivel de seguridad mínimo necesario para que funcione. Te recomiendo que hagas el impersonate solo del servicio web y no en todo el site, para eso usa el un nodo location en el web.config
|
| |
 |
Muy buen ejemplo
por
SaT[A]NIC
Respuesta recibida el [25/11/2009 11:55:35]
|
 |
Excelente, el mejor ejemplo que encontré. Saludos.
|
| |
 |
Traducción
por
J
Respuesta recibida el [22/02/2010 08:36:24]
|
 |
Disculpen, pero hay alguna forma de explicar esto como para novatos? Sólo quiero abrir un archivo XML pero no sé nada de programación, códigos y esas cosas extrañas de la vida.
|
| |
 |
Gracias =)
por
Byron Marambio
Respuesta recibida el [25/02/2010 11:31:02]
|
 |
Muchas gracias por el articulo man, esta muy bueno, me fue muy útil para el proyecto en el que estoy XD
|
| |
 |
agradecido
por
bounty
Respuesta recibida el [25/02/2010 03:26:32]
|
 |
GRACIAS POR EL APORTE VIEJO FUNK EXCELENTE....!
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
Como leer XML con C# |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
63920 |
Fecha de publicación:
09/05/2006 |
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.
Posee mas de diez años de experiencia trabajando para las principales empresas de España.
Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).
Es fundador, diseñador y programador de www.devjoker.com. |
|
|
Visitas:
76
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
783
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
706
|
Comentarios:
3
|
Archivo:
Articulos
|
Visitas:
632
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
3090
|
Comentarios:
2
|
Archivo:
Articulos
|
Visitas:
14444
|
Comentarios:
7
|
Archivo:
Articulos
|
Visitas:
1456
|
Comentarios:
3
|
Archivo:
Articulos
|
|
Visitas:
686
|
Comentarios:
2
|
Archivo:
Articulos
|
|
Visitas:
366
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
1965
|
Comentarios:
2
|
Archivo:
Articulos
|
|
|
 |
|
 |