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.
Utilizando el XMLTextReader
Este formato es muy sencillo y para leer el achivo debemos hacerlo de forma secuencial, línea por línea.
C#
using System.IO; using System.Xml; class ParsingUsingXmlTextReader { static void Main() { XmlTextReader m_xmlr; // 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 (!m_xmlr.EOF) { // Avanzamos al siguiente tag m_xmlr.Read(); // si no tenemos el elemento inicial // debemos salir del ciclo if (!m_xmlr.IsStartElement()) { break; } // Obtenemos el elemento codigo object mCodigo = m_xmlr.GetAttribute("codigo"); // Read elements firstname and lastname m_xmlr.Read(); // Obtenemos el elemento del Nombre del Usuario object mNombre = m_xmlr.ReadElementString("nombre"); // Obtenemos el elemento del Apellido del Usuario object 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("\r\n"); } // Cerramos la lactura del archivo m_xmlr.Close(); } }
VB
Imports System.IO Imports System.Xml Class ParsingUsingXmlTextReader Private Shared 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 As Object = m_xmlr.GetAttribute("codigo") ' Read elements firstname and lastname m_xmlr.Read ' Obtenemos el elemento del Nombre del Usuario Dim mNombre As Object = m_xmlr.ReadElementString("nombre") ' Obtenemos el elemento del Apellido del Usuario Dim mApellido As Object = 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 Class
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 muy grandes.
C#
using System.IO; using System.Xml; class ParsingUsingXmlDocument { static void Main() { try { XmlDocument m_xmld; XmlNodeList m_nodelist; XmlNode m_node; 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 foreach (m_node in m_nodelist) { // Obtenemos el atributo del codigo object mCodigo = m_node.Attributes.GetNamedItem("codigo").Value; // Obtenemos el Elemento nombre object mNombre = m_node.ChildNodes.Item[0].InnerText; // Obtenemos el Elemento apellido object 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("\r\n"); } } catch (Exception ex) { // Error trapping Console.Write(ex.ToString()); } } }
VB
Imports System.IO Imports System.Xml Class ParsingUsingXmlDocument Private Shared 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 in As m_node In m_nodelist ' Obtenemos el atributo del codigo Dim mCodigo As Object = m_node.Attributes.GetNamedItem("codigo").Value ' Obtenemos el Elemento nombre Dim mNombre As Object = m_node.ChildNodes.Item(0).InnerText ' Obtenemos el Elemento apellido Dim mApellido As Object = 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 Class
[…] importante para todo programador saber persistir y leer archivos XML con o sin sus XSD, porque tiene importancia para muchas […]