InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosEmail
También puedes ver ...
LinQ To SQL - Un ejemplo sencillo
Sitios Web de ejemplo ASP.NET
Problemas en la instalación de Visual Studio 2008-Visual studio web authoring component
Redimiento de VS2008
Nueva galeria de iconos
Insertar en una Tabla usando Linq2SQL (Linq To SQL)
Primeros pasos con Linq2SQL (Linq To SQL)
Novedades Visual Studio 2008 DataSet en 3 capas o MVC
Novedades en C# 3.0 - Primeros pasos con LINQ
Primeras impresiones sobre Visual Studio 2008

Afiliados
La Web del programador
MundoProgramacion


 Versión para imprimir

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, WebServicesSOAPASP.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


 Versión para imprimir  Foros de consulta

 
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


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

Como leer XML con C#
Autor: Pedro Herrarte Sánchez
Visitas: 17115 Fecha de publicación: 09/05/2006
Pedro Herrarte, es consultor tecnológico en nCapas Software(empresa de la que además es fundador), donde realiza tareas de consultoría, análisis y desarrollo.

Ha trabajado con muchas tecnologías ... SQL Server, T-SQL, ORACLE, PL/SQL, ASP.NET, ASP, CGI , C#, C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...

Es especialista en tecnologías .NET, entornos Web, y bases de datos, especialmente SQL Server y ORACLE.

Es fundador, diseñador y programador de www.devjoker.com.



devjoker  Lo más nuevo ... Donde se habla ... 
03/04/2008 LINQ con métodos Extensores y expresiones lambda    forma parte de...Métodos extensores
03/04/2008 Métodos Extensores: SELECT    forma parte de...Métodos extensores
03/04/2008 Almacenamiento (1)    forma parte de...Tutorial de Sistemas Informaticos
28/03/2008 Mapa de configuracion de WCF
28/03/2008 LinQ To SQL - Un ejemplo sencillo
25/03/2008 Sitios Web de ejemplo ASP.NET
22/03/2008 Problemas al conectar a redes wifi con Windows Vista
19/03/2008 Service Pack 1 de Windows Vista

Útimos temas recibidos en los foros ...
Insertar datos en un grid manualmente por flakita ... [C#] 0 09/04/2008
ayuda con un select por Manu ... [mySQL] 8 25/07/2007
CHASIS DE UN PC CUALQUIERA por carolina ... [WIN 98/NT/2000/XP] 5 23/11/2006
Q PASA JENTE por torrichi ... [Java] 2 25/03/2008
LLINQ to SQL por Javier ... [C#] 1 09/04/2008
Agendar tarea por dia pero q pueda ser a diferente hora cada dia por Orlan ... [C#] 1 09/04/2008
Ventana Popup por Maurito22 ... [ASP.NET] 1 31/03/2008
No se puede abrir el archivo fisico por ron ... [C#] 1 07/04/2008
Data report visual basic 6.0 impresion con codigo por Andres ... [Visual Basic 6.0] 8 19/11/2007
Como abrir un docuemto de word desde c# y leer las palabras para luego enviar a access por llen ... [C#] 1 08/04/2008
sentencia for por .net ... [C#] 2 08/04/2008
Leer campos blob de oracle en lenguaje visual basic por janito ... [Visual Basic 6.0] 0 08/04/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
12/01/2006 Programación con PL/SQL    forma parte de...Tutorial PL/SQL
16/10/2006 Delegados y eventos    forma parte de...Tutorial C#
14/05/2007 Fundamentos de Transact SQL    forma parte de...Tutorial de Transact SQL
31/03/2006 Operadores en PL/SQL    forma parte de...Tutorial PL/SQL
11/09/2006 Trabajar con datos de tipo BLOB en ORACLE
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
20/03/2008 Funciones integradas de Transact SQL (I)    forma parte de...Tutorial de Transact SQL
28/08/2006 Ubuntu en VmWare con VMware Tools
16/08/2007 Operaciones con conjuntos.    forma parte de...Tutorial de Transact SQL

 

Encuesta
¿Cual es tu lenguaje de programación favorito?
[Ver] [Votar]