7 marzo, 2013

Leer ficheros XML a través de DataSet (c#)

Para leer un fichero xml en c# se puede utilizar los componentes de manejo de base de datos. Esto facilita enormemente su manejo.

Ejemplo de un fichero XML.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<NombreBaseDeDatos>
  <NombreTabla1>
    <NombreCampo1>Campo 1 Registro 1 Tabla 1</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 1 Tabla 1</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 1 Tabla 1</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 1 Tabla 1</NombreCampo4>
  </NombreTabla1>
  <NombreTabla2>
    <NombreCampo1>Campo 1 Registro 1 Tabla 2</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 1 Tabla 2</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 1 Tabla 2</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 1 Tabla 2</NombreCampo4>
  </NombreTabla2>
  <NombreTabla1>
    <NombreCampo1>Campo 1 Registro 2 Tabla 1</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 2 Tabla 1</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 2 Tabla 1</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 2 Tabla 1</NombreCampo4>
  </NombreTabla1>
</NombreBaseDeDatos>

Formato como se guarda la información en el fichero XML. El fichero en si es la base de datos, este puede contener una base de datos o varias, dentro de este están las posibles tablas que pudiera tener esa base de datos. Y estas a su vez contendrá los registros que tenga cada una de las tabla con sus respectivos campos.

Lectura de fichero XML

Para leer el fichero XML lo primero tendremos que crear un objeto del tipo «DataSet» para que maneje el fichero. Hay dos formas de crearlo, sabiendo como se llama  nuestra base de datos o no.

Sin saber como se llama la base de datos:

// Crear el objeta DataSet sin conocer el nombre de la base de datos
DataSet dataSet1 = new DataSet();

Esto permite ver cualquier contenido del fichero.

Conociendo como se llama la base de datos:

// Crear el objeta DataSet conociendo el nombre de la base de datos
DataSet dataSet1 = new DataSet("NombreDeLaBaseDeDatos");

De esta otra forma solo se podrán manejar los datos que estén dentro de esa base de datos. Teniendo creado el objeto DataSet solo queda asignarle el nombre que tiene el fichero XML.

dataSet1.ReadXml("RutayNombreDelFicheroXML");

Con esto ya tenemos configurado nuestra DataSet para leer los datos del fichero. A partir de aqui, se maneja de la misma forma que cualquier otro DataSet que funcione con cualquier otro tipo de base de datos.

Ejemplo de funcionamiento.

Se lee el fichero y se muestra en un DataGridView

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Xml_DataSet_1
{
    public partial class fLeerXmlDataSet : Form
    {
        // Objeto dataset para manejar el fichero
        // no le ponemos nombre de la base de datos para poder abrir cualquier fichero
        DataSet dsLeerFicheroXML = new DataSet();

        public fLeerXmlDataSet()
        {
            InitializeComponent();
        }

        private void bAbrirFicheroXml_Click(object sender, EventArgs e)
        {
            // Limpiamos el contenido anterior
            dsLeerFicheroXML.Clear();

            // Creamos el objeto para abrir el fichero
            OpenFileDialog odAbrirFicheroXML = new OpenFileDialog();
            // Le ponemos un filtro para ver solamente los ficheros XML
            odAbrirFicheroXML.Filter = "Ficheros Xml|*.xml";

            // Montramos el dialogo para abrir el fichero XML
            if (odAbrirFicheroXML.ShowDialog() == DialogResult.OK)
            {
                // Si se ha pulsado el boton de OK
                // Le pasamos el nombre del fichero al DataSet para abrirlo
                dsLeerFicheroXML.ReadXml(odAbrirFicheroXML.FileName);
                // Le pasamos el contenido de la primera tabla del fichero al DataGridView
                dgvLeerFicheroXML.DataSource = dsLeerFicheroXML.Tables[0];
            }
        }
    }
}