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 […]