Lectura de datos XML

18. December 2008 15:23 by Oscar.SS in XML  //  Tags:   //   Comments (2)

En el espacio de nombres System.Xml tenemos a nuestra disposición multitud de clases que nos permiten el manejo, escritura y lectura de los archivos XML. En este artículo nos centraremos en la lectura de los datos almacenados en un archivo XML.

Supongamos que tenemos un archivo XML que guarda los datos de los empleados de una empresa. Estos datos podrían ser el nombre, los apellidos, el número de la seguridad social y el teléfono. Simplificando mucho el archivo podría tener la siguiente estructura:

 

<?xml version="1.0" encoding="utf-8" ?>
<empleados>
  <empleado>
    <idEmpleado>
1</idEmpleado>
    <nombre>Pedro</nombre>
    <apellidos>Martinez Segura</apellidos>
    <numeroSS>
111-111-111-111</numeroSS>
    <telefonos>
      <fijo>
913847913</fijo>
      <movil>
680432874</movil>
    </telefonos>
  </empleado>

  <empleado>
    <idEmpleado>
2</idEmpleado>
    <nombre>Amalia</nombre>
    <apellidos>García Pedrueza</apellidos>
    <numeroSS>
222-222-222-222</numeroSS>
    <telefonos>
      <fijo>
947895433</fijo>
      <movil>
678343221</movil>
    </telefonos>
  </empleado>

  <empleado>
    <idEmpleado>
3</idEmpleado>
    <nombre>Luis</nombre>
    <apellidos>Gómez Luta</apellidos>
    <numeroSS>
333-333-333-333</numeroSS>
    <telefonos>
      <fijo>
968454907</fijo>
      <movil>
678453248</movil>
    </telefonos>
  </empleado>
</empleados>

Lo que pretendemos es implementar un método que nos permita recuperar los datos de un empleado en función de un número (idEmpleado) introducido por el usuario de nuestra aplicación.

Para leer este documento vamos a utilizar los siguientes objetos:

  • XmlDocument. Representa el documento o archivo XML. Con este objeto cargaremos el archivo XML que pretendemos leer.
  • XmlNodeList. Representa una colección de nodos XML. Permite obtener todos los nodos de un tipo concreto especificado por una ruta XPath.
  • XmlNode.Representa un único nodo. Con él podremos acceder a su contenido, tanto si solo contiene una cadena de texto como si contine otros nodos (nodos hijos).

A grandes rasgos, la técnica a ejecutar es la siguiente. Primeramente obtenemos una lista con todos los empleados, de esta lista obtenemos el empleado en función del número introducido por el usuario. A continuación pasamos a recuperar los datos del empleado.

Aquí teneís una función que realiza esta tarea. No es la única forma de hacerlo, así que os aconsejo que investiguéis y encotréis por vuestros propios medios la forma que más comoda os resulte.

 

        public void ObtenerEmpleado(int numEmpleado)
        {
            
//Creamos un documento y lo cargamos con los datos del XML.
            
XmlDocument documento = new XmlDocument();
            
documento.Load("Ruta y nombre del archivo XML");

            
//Obtenemos una colección con todos los empleados.
            
XmlNodeList listaEmpleados documento.SelectNodes("empleados/empleado");

            
//Creamos un único empleado.
            
XmlNode unEmpleado;

            
//Recorremos toda la lista de empleados.
            
for (int 0i < listaEmpleados.Counti++)
            {
                
//Obtenemos cada empleado.
                
unEmpleado listaEmpleados.Item(i);

                
//Seleccionamos el id del empleado.
                
int idEmpleado Convert.ToInt32(unEmpleado.SelectSingleNode("idEmpleado").InnerText);

                
//Comprobamos que el id de empleado sea el mismo que el número introducido por el usuario.
                
if (numEmpleado == idEmpleado)
                {
                    Console.WriteLine()
;

                    
//Obtenemos el nombre.
                    
Console.WriteLine("Nombre: {0}", unEmpleado.SelectSingleNode("nombre").InnerText);

                    
//Obtenemos los apellidos.
                    
Console.WriteLine("Apellidos: {0}", unEmpleado.SelectSingleNode("apellidos").InnerText);

                    
//Obtenemos el número de la seguridad social.
                    
Console.WriteLine("N.S.S.: {0}", unEmpleado.SelectSingleNode("numeroSS").InnerText);

                    
//Obtenemos la lista de telefonos.
                    
XmlNodeList telefonos unEmpleado.SelectSingleNode("telefonos").ChildNodes;

                    
//Obtenemos el teléfono fijo y movil.
                    
XmlNode tlfFijo telefonos[0];
                    
XmlNode tlfMovil telefonos[1];

                    
Console.WriteLine("Teléfono fijo: {0}", tlfFijo.InnerText);
                    
Console.WriteLine("Teléfono movil: {0}", tlfMovil.InnerText);
                
}
            }
        }

Programación Orientada a Objetos en .NET con C# (4ª parte)

8. December 2008 02:50 by Oscar.SS in Desarrollo .NET, Formación  //  Tags: ,   //   Comments (0)

2. Encapsulación

c- Clases en C# (declaración y accesibilidad)

 

En el artículo anterior vimos como la encapsulación estaba directamente relacionada con las clases y la relación de estas con los objetos. Ahora vamos a ver cómo hacer uso de las clases desde nuestro código C#.

Definir una clase en C# es muy sencillo. Solo tenemos que utilizar la palabra reservada "class" seguida del nombre que queramos darle a nuestra clase.

    class Empleados
    {
 
    }

De esta forma ya tenemos una clase (también llamado tipo definido por el usuario) con la que podemos empezar a trabajar. Antes de continuar hablando de los miembros que podemos implementar en una clase debemos hacer una pausa para hablar de los modificadores de accesibilidad.

 

Modificadores de accesibilidad en .NET

Los modificadores de accesibilidad permiten definir el nivel de acceso que tendrán los tipos y los miembros de estos tipos para otros usuarios. Entendiendo por otros usuarios a otros tipos que pertenezcan al mismo proyecto o incluso a un proyecto distinto. Veamos estos modificadores por orden de accesibilidad de mayor a menor.

- public: Un tipo o miembro declarado public puede ser usado desde cualquier código que pertenezca al mismo proyecto o a un proyecto diferente. Es el modificador menos restrictivo de todos.

- internal: Un tipo o miembro declarado internal puede ser usado desde cualquier código que pertenezca al mismo proyecto. Debemos verlo como un tipo o miembro interno de nuestro proyecto.

- protected: Un tipo o miembro declarado protected solo puede ser usado por el código de la misma clase o por código de una clase derivada.

- protected internal: Es una mezcla de los dos anteriores. Puede ser usado por código que pertenezca al mismo proyecto y por código de la misma clase o de una clase derivada.

- private: Un tipo o miembro declarado private solo puede ser usado por código de la misma clase o estructura. Es el más restrictivo de todos los modificadores de accesibilidad.

Todos los tipos (y los miembros de los tipos) tienen un determinado tipo de accesibilidad predefinido. Es decir, si no utilizamos ninguno de los anteriores, el compilador de C# asignará uno por defecto. Normalmente en este estudio hablaremos de las clases por ser el tipo definido por el usuario más flexible y potente, pero en la siguiente tabla podemos ver que modificadores de accesibilidad por defecto corresponden a cada tipo.

 

 

TIPOS

Declarado en ámbito de namespace

Accesibilidad predeterminada

Accesibilidad declarada permitida

Enum

Public

Internal

Public

Class

Internal

 

Internal

Public

Interface

Public

Internal

Public

Struct

Internal

Internal

                 Public               

 

 Nota: Los miembros de las clases tales como métodos y propiedades pueden ser declarados utilizando cualquiera de los modificadores de accesibilidad, teniendo como accesibilidad predeterminada private.

Según todo lo explicado, es fácil deducir que en la declaración de nuestra clase  Empleado, como no especificamos un modificador de accesibilidad, tendrá la accesibilidad Internal.

Bueno, ahora que tenemos claro (eso espero) todo este lío de los modificadores de accesibilidad, vamos a ver en profundidad los miembros que normalmente implementaremos en una clase.

La forma de implementar una clase dependerá en gran medida de las exigencias de nuestro código y de la finalidad de la clase misma. Pero normalmente una clase será un contenedor para los siguientes miembros:

- Constructores.

- Atributos.

- Propiedades.

- Campos.

- Métodos.

- Otros tipos.

- Destructor.

 

 En los artículos siguientes trataremos cada uno de estos miembros en profundidad. La comprensión de los conceptos relacionados con la implementación de los miembros de una clase es de suma importacia para enfocar los restantes pilares (herencia y polimorfismo) de la programación orientada a objetos.

 

Formación online por medio de las Webcasts

4. December 2008 00:54 by Oscar.SS in Formación  //  Tags:   //   Comments (0)

Esta noticia de tipo formativa tan solo contiene un enlace. No por ello encontraréis menos contenido que otras veces. En la página de destino encontraréis una lista de Webcasts (pasados y de proxima edición) publicados por la factoría MSDN MediaCenter.

 

 http://www.microsoft.com/spanish/msdn/latam/mediacenter/

 

Espero que disfrutéis de este recurso.

Recent Comments

Comment RSS

Month List