DotNetcr.com
Si deseas hacer un intercambio de links con DotNetcr, escríbenos aquí
Recibe las actualizaciones vía RSS
Te invitamos a unirte en nuestras redes
   http://www.facebook.com/DotNetcr
   http://www.twitter.com/dotnetcr

Como leer un archivo XML en VB.NET

Por royrojas | 7/14/2005 | Visitas 59,336 | Voto 4.00
Aprendamos a leer un archivo en XML con XML XMLTextReader y XmlDocument
Categorías : XML
Como primer paso debemos tener un archivo XML que nos sirva para probar nuestra aplicación. Podemos crearlo con el código detallado abajo con el nombre de XMLPrueba.xml. Debemos crear este archivo en un editor como el NotePad, ya que necesitamos un archivo sin caracteres extraños.

<?xml version="1.0" encoding="UTF-8"?>
<usuarios>
<name codigo="mtorres">
<nombre>Maria </nombre>
<apellido>Torres </apellido>
</name>
<name codigo="cortiz">
<nombre>Carlos </nombre>
<apellido>Ortiz </apellido>
</name>
</usuarios>


Luego de tener nuestro archivo XML creado podremos crear nuestro código en VB.NET

Utilizando el XMLTextReader
Este formato es muy sencillo y para leer el achivo XML debemos hacerlo secuencialmente, línea por línea.

Imports System.IO
Imports System.Xml
Module ParsingUsingXmlTextReader
Sub Main()
Dim m_xmlr As XmlTextReader
'Creamos el XML Reader
m_xmlr = New XmlTextReader("C:\XMLPrueba.xml")

'Desabilitamos las lineas en blanco,
'ya no las necesitamos
m_xmlr.WhiteSpaceHandling = WhiteSpaceHandling.NONE

'Leemos el archivo y avanzamos al tag de usuarios
m_xmlr.Read()

'Leemos el tag usuarios
m_xmlr.Read()

'Creamos la secuancia que nos permite
'leer el archivo
While Not m_xmlr.EOF
'Avanzamos al siguiente tag
m_xmlr.Read()

'si no tenemos el elemento inicial
'debemos salir del ciclo
If Not m_xmlr.IsStartElement() Then
Exit While
End If

'Obtenemos el elemento codigo
Dim mCodigo = m_xmlr.GetAttribute("codigo")
'Read elements firstname and lastname

m_xmlr.Read()
'Obtenemos el elemento del Nombre del Usuario
Dim mNombre = m_xmlr.ReadElementString("nombre")

'Obtenemos el elemento del Apellido del Usuario
Dim mApellido = m_xmlr.ReadElementString("apellido")

'Escribimos el resultado en la consola,
'pero tambien podriamos utilizarlos en
'donde deseemos
Console.WriteLine("Codigo usuario: " & mCodigo _
& " Nombre: " & mNombre _
& " Apellido: " & mApellido)
Console.Write(vbCrLf)
End While

'Cerramos la lactura del archivo
m_xmlr.Close()

End Sub
End Module


Utilizando el XmlDocument
Este formato es mas complejo y nos permite recorrer los nodos sin tener que utilizar una lectura secuencial. Definitivamente este formato es más eficiente que el anterior principalmente para documentos XML muy grandes.

Imports System.IO
Imports System.Xml
Module ParsingUsingXmlDocument
Sub Main()
Try
Dim m_xmld As XmlDocument
Dim m_nodelist As XmlNodeList
Dim m_node As XmlNode

'Creamos el "XML Document"
m_xmld = New XmlDocument()

'Cargamos el archivo
m_xmld.Load("C:\XMLPrueba.xml")

'Obtenemos la lista de los nodos "name"
m_nodelist = m_xmld.SelectNodes("/usuarios/name")

'Iniciamos el ciclo de lectura
For Each m_node In m_nodelist
'Obtenemos el atributo del codigo
Dim mCodigo = m_node.Attributes.GetNamedItem("codigo").Value

'Obtenemos el Elemento nombre
Dim mNombre = m_node.ChildNodes.Item(0).InnerText

'Obtenemos el Elemento apellido
Dim mApellido = m_node.ChildNodes.Item(1).InnerText

'Escribimos el resultado en la consola,
'pero tambien podriamos utilizarlos en
'donde deseemos
Console.Write("Codigo usuario: " & mCodigo _
& " Nombre: " & mNombre _
& " Apellido: " & mApellido)
Console.Write(vbCrLf)

Next
Catch ex As Exception
'Error trapping
Console.Write(ex.ToString())
End Try
End Sub
End Module
Area de Comentarios
Por Anónimo - Fecha: 2005/09/26 10:18 PM
Felicitaciones..!!!

DCE 4 - Percy Reyes Paredes
http://percyreyes.blogspot.com
http://netarticles-percyreyes.blogspot.com
Por Anónimo - Fecha: 2005/10/19 04:19 AM
La verdad es que este documento me ha salvado la vida, es impresionante, muchas gracias al autor.
Por royrojas - Fecha: 2005/10/22 03:39 PM
excelente, que bueno saber que este recurso te ayudó.
saludos
Por Anónimo - Fecha: 2005/11/23 03:24 PM
Doroteo Catalán L.
Gracias
Sencillo y eficaz
Por Anónimo - Fecha: 2005/12/08 02:29 PM
Muy buen articulo, de una manera facil se puede accesar un archivo XML. Gracias por la ayuda.

Edward Salas
Por Anónimo - Fecha: 2005/12/27 04:57 PM
Me parece excelente ejemplo; ahora bien, ¿como puedo acceder directamente a uno de los name, si ya tengo el codigo digamos que como resultado de una entrada del usuario o de una consulta sql?

Gabriel Pedrero
Por Anónimo - Fecha: 2006/01/27 05:34 PM
Gracias...
Por Anónimo - Fecha: 2006/02/17 10:00 AM
bueno
Por Anónimo - Fecha: 2006/02/28 01:57 PM
Hola.. muy bueno..pero como hago para agregarle una referencia a un XLS... se genera el xml..pero necesito agregarle la referencia 1!! ayudenme xfa!!
Por prolucasnet - Fecha: 2006/03/30 04:32 PM
Hola Brother esta muy interesante tu articulo me sirvio mucho...Ok siga asi colaborando. Suerte
Por Anónimo - Fecha: 2006/10/05 06:49 AM
Molt bo.
Por Anónimo - Fecha: 2006/10/12 03:02 PM
HOLA HERMANO PARECE Q TU AYUDA ES MUY WENA GRACIAS
Por Anónimo - Fecha: 2006/10/16 03:51 PM
estaba buscando quien vendia pan por interet y llegue hasta esta pagina
Por Anónimo - Fecha: 2006/10/18 12:42 PM
Es un ejemplo excelente, por lo sencillo y bien explicado.
Por Anónimo - Fecha: 2006/10/18 06:42 PM
Excelente artículo he podido encontrar una referencia clara y precisa, mis más sinceras felicitaciones RuyRojas por tu aporte y tu esfuerzo
Por Anónimo - Fecha: 2006/10/21 01:44 AM
Me parece un buen articulo, solo que como le hago para un acceso aleatorio con el XMLDocument?
Por Anónimo - Fecha: 2007/02/15 11:10 PM
me sirvio mucho!! TNKS
Por Lobo - Fecha: 2007/02/16 09:17 AM
Hola, no encontre una Seccion de Foros para poder postear la duda asi que la puse aca a ver si alguien sabe lo que pasa, ofrezcos disculpas por los inconvenientes.

Tengo dos aplicaciones, ambas en c# 2005, una es un web service que consulta una base de datos SQL 2000, y el otro es una aplicacion WindowsForm que se conecta al web service para solicitar la informacion.

El problema radica en esto: estoy utilizando la instruccion for xml raw en los stores procedures que son executados por el WS, cuando llamo a la funcion del WS desde un browser, la respuesta es correcta, el xml es valido y la informacion es legible, lo que sucede es que la aplicacion w32 no me deja cargar el retorno en un xmlDocument pq me dice que esta mal formateado, yo intento hacerlo asi:

string response = ws.FINDCARD(FirstName, LastName);
if (response.Length > 0)
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(response);
}

La funcion FindCard retorna un string, ya intente retornando un XmlDocument y me despliga el mismo error: el documento esta mal formateado; al hacerle un watch a la variable noto que las " estan sustituidas por \" cosa normal en C#, lo que sucede es que no c como pasar el documento sin las \" al objeto. Alguien me puede ayudar? Alguien tiene alguna otra forma de enviar resultados de una tabla por WS y poder procesarlos en una aplicacion WindowsForm?
Por Anónimo - Fecha: 2007/03/23 04:20 PM
muy buen codigo
Por Anónimo - Fecha: 2007/06/06 08:28 PM
muy buen Articulo!

jose Andrés Arcila
http://www.marketext.com
SMS A CUALQUIER PARTE DEL MUNDO!!
Por Anónimo - Fecha: 2007/10/19 04:23 PM
Sencillo y claro, que más se puede pedir. Gracias

Eduardo
Por Anónimo - Fecha: 2008/02/21 12:47 PM
como no leo un tag que venga en blanco o vacio como lo paso por alto ????
Por Anónimo - Fecha: 2008/04/23 03:01 PM
excelente articulo, gracias !
Por Anónimo - Fecha: 2008/04/25 08:59 AM
Muy buenas!

Tengo un problema al utilizar XmlDocument: Estoy abriendo un Xml generado por Jacada Integrator desde una URL, pero el Xml a veces puede durar hasta 2 o 3 minutos en cargar. Como puedo ejecutar el m_xmld.Load() en este caso sin que me devuelva error de TimeOut?

Muchas gracias de antemano.

Nelson Ochoa
loconelson@gmail.com
Por Anónimo - Fecha: 2008/06/04 06:57 PM
no sirve con namespace
Por Anónimo - Fecha: 2008/08/16 12:30 PM
No lo habia visto tan claro como aqui, gracias!
Por Anónimo - Fecha: 2008/08/20 10:41 AM
muy buen articulo. Excelente explicación. Conciso y Preciso. Felicidades. EZ
Por Anónimo - Fecha: 2008/09/08 08:52 AM
Gracias por el articulo, me ha servido bastante.
Por Anónimo - Fecha: 2008/09/16 01:59 PM
Muy bueno!!!
Por Anónimo - Fecha: 2008/09/16 02:00 PM
Claro, sencillo, útil
Por royrojas - Fecha: 2010/01/25 08:35 AM
cualquier pregunta sobre esta clase o algun tema en general pueden visitar nuestro foro http://www.forosdotnet.com
Por Anónimo - Fecha: 2010/02/06 09:54 PM
me parece excelente.
gracias
Por Anónimo - Fecha: 2010/03/09 04:22 PM
La verdad es que este documento me ha salvado la vida, es impresionante, muchas gracias al autor. Tengo que presentar un trabajo en la U y me has ayudado mucho.
Por Anónimo - Fecha: 2010/03/09 04:23 PM
La verdad es que este documento me ha salvado la vida, es impresionante, muchas gracias al autor. Tengo que presentar un trabajo en la U y me has ayudado mucho.
Por Anónimo - Fecha: 2010/08/26 07:27 PM
Es más sencillo y óptimo utilizar XPath o XQuery
Por Anónimo - Fecha: 2010/10/12 01:25 PM
Muy bien, se explica claramente. Gracias por la ayuda.
Por Anónimo - Fecha: 2010/11/25 12:04 PM
Gracias excelente
Por Anónimo - Fecha: 2011/06/08 11:59 AM
Hola he estado buscando la forma de leer la version del archivo xml que estoy leyendo pero aun no encuentro nada, agradeceria si complementaran este grandioso tema con mi problema, de antemano muchas gracias!
Por Anónimo - Fecha: 2011/09/02 12:52 PM
Como puedo obtener el contenido, sin necesidad de establecer el puntero en el arreglo childnodes?
Ejemplo
Dim mApellido = m_node.ChildNodes.Item(1).InnerText
buscarlo por nombre del nodo, no por su posicion.
Tengo una clase q crea xml, pero dependiendo del objeto agrega hijos al xml, son xml "dinamicos" solo puedo referenciar a ellos por su nombre (no quiero utilizar los id).
Saludos
Por Anónimo - Fecha: 2011/11/04 02:51 PM
Alguien tiene algo para facturación electronica??
tanto para generar la factura como para leer el xml???
espero alguien me pueda ayudar ya que dependo mucho para conservar mi trabajo

saludos.
Por Anónimo - Fecha: 2012/04/19 07:27 PM
Hola, me interesaría saber como leer un nodo que esta dentro de otro nodo
Por Anónimo - Fecha: 2012/04/20 02:32 AM
Lo del nodo dentro de otro también lo estoy buscando yo. Lo único que he encontrado es esto:

m_nodelist = m_xmld.SelectNodes("/usuarios/name/NodoNuevo")

Utilizando como base el XML del ejemplo de esta página, con la instrucción se entraría a un nodo dentro de "name", que a su vez está dentro de "usuarios". El problema es para estructuras con muchos nodos anidados (tengo unos 9 en una estructura) y es una locura tener que escribir todos los nodos cada vez. Creo que también se puede hacer a través de las propiedades "ParentNode" y "ChildNode", pero no lo veo claro.
Si encuentro algo lo posteo por aquí...

Un saludo. ;)


Por Anónimo - Fecha: 2012/04/25 11:14 PM
That's an expert aneswr to an interesting question
Por Anónimo - Fecha: 2012/04/27 06:50 AM
ofB1di , [url=http://luywtfvvafpv.com/]luywtfvvafpv[/url], [link=http://airunpdrfxsq.com/]airunpdrfxsq[/link], http://jlxtzriuymfp.com/
Por Anónimo - Fecha: 2012/04/28 01:05 PM
shs7cG , [url=http://lxlatnankbgz.com/]lxlatnankbgz[/url], [link=http://ppapssgkqqlp.com/]ppapssgkqqlp[/link], http://anlvzruvkkvz.com/
Por Anónimo - Fecha: 2012/07/19 10:54 AM
Muchíiiiisimas gracias por compartir tus conocimientos
Por Anónimo - Fecha: 2012/07/27 01:24 PM
Se agradece muchísimo!
Por Anónimo - Fecha: 2012/09/17 05:25 PM
No se si este actual el post pero lo acabo de encontrar, y pues lo ke kiero hacer, es leer un xml con mi adenda cfdi timbrado y firmado, ya que seria externo y en vb.net leerlo y anadir un nuevo nodo al final antes de cerrar la estructura del XML y volverlo a guardar.
Saludos...
Ingrese su Comentario
Comentario
Para poder votar debe estar registrado en DotNetcr.com
Solo queda registrado el primer voto enviado
Voto


Últimos Recursos
ricardo leppe t
pedrojavier
CALIN
willipinru
richard
ragomez
PER 238
MEX 236
CRI 188
COL 118
ESP 105
ARG 88