/// <summary>
        /// FunciĆ³n que lee los nodos XML de un documento CFDI
        /// </summary>
        /// <param name="padre"></param>
        private void LeerNodos(XmlNode padre)
        {
            // Procesamos el nodo
             switch(padre.Prefix) {
               case "cfdi": {
                  switch(padre.LocalName) {
                     case "Comprobante":
                        cfdi = new Comprobante();
                        cfdi.atributos = leerAtributos(padre);
                        break;
                     case "Emisor":
                        cfdi.Emisor = new Emisor();
                        cfdi.Emisor.atributos = leerAtributos(padre);
                        break;
                     case "DomicilioFiscal":
                        cfdi.Emisor.DomicilioFiscal = new DomicilioFiscal();
                        cfdi.Emisor.DomicilioFiscal.atributos = leerAtributos(padre);
                        break;
                     case "ExpedidoEn":
                        cfdi.Emisor.ExpedidoEn = new ExpedidoEn();
                        cfdi.Emisor.ExpedidoEn.atributos = leerAtributos(padre);
                        break;
                     case "RegimenFiscal":
                        cfdi.Emisor.RegimenFiscal = padre.Attributes["Regimen"].Value;
                        break;
                     case "Receptor":
                        cfdi.Receptor = new Receptor();
                        cfdi.Receptor.atributos = leerAtributos(padre);
                        break;
                     case "Domicilio":
                        cfdi.Receptor.Domicilio = new Domicilio();
                        cfdi.Receptor.Domicilio.atributos = leerAtributos(padre);
                        break;
                     case "Conceptos":
                        cfdi.Conceptos = new Conceptos();
                        break;
                     case "Concepto":
                        Concepto concepto = new Concepto();
                        concepto.atributos = leerAtributos(padre);
                        cfdi.Conceptos.Agregar(concepto);
                        break;
                     case "Impuestos":
                        cfdi.Impuestos = new Impuestos();
                        cfdi.Impuestos.atributos = leerAtributos(padre);
                        break;
                     case "Traslados":
                        cfdi.Impuestos.Traslados = new Traslados();
                        break;
                     case "Traslado":
                        Traslado traslado = new Traslado();
                        traslado.atributos = leerAtributos(padre);
                        cfdi.Impuestos.Traslados.Agregar(traslado);
                        break;
                     case "Retenciones":
                        cfdi.Impuestos.Retenciones = new Retenciones();
                        break;
                     case "Retencion":
                        Retencion retencion = new Retencion();
                        retencion.atributos = leerAtributos(padre);
                        cfdi.Impuestos.Retenciones.Agregar(retencion);
                        break;
                     }
                  break;
               }
               case "tfd": {
                  switch(padre.LocalName) {
                        case "TimbreFiscalDigital":
                        TimbreFiscalDigital timbre = new TimbreFiscalDigital();
                        timbre.atributos = leerAtributos(padre);
                        cfdi.AgregarComplemento(timbre);
                        break;
                  }
                  break;
               }
               case "nomina": {
                  switch(padre.LocalName) {
                        case "Nomina":
                        Nomina nomina = new Nomina();
                        nomina.atributos = leerAtributos(padre);
                        cfdi.AgregarComplemento(nomina);
                        break;
                     case "Percepciones":
                        Percepciones percepciones = new Percepciones();
                        percepciones.atributos = leerAtributos(padre);
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.Percepciones = new Percepciones();
                        break;
                     case "Percepcion":
                        Percepcion percepcion = new Percepcion();
                        percepcion.atributos = leerAtributos(padre);
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.Percepciones.Agregar(percepcion);
                        break;
                     case "Deducciones":
                        Deducciones deducciones = new Deducciones();
                        deducciones.atributos = leerAtributos(padre);
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.Deducciones = deducciones;
                        break;
                     case "Deduccion":
                        Deduccion deduccion = new Deduccion();
                        deduccion.atributos = leerAtributos(padre);
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.Deducciones.Agregar(deduccion);
                        break;
                     case "Incapacidades":
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.Incapacidades = new Incapacidades();
                        break;
                     case "Incapacidad":
                        Incapacidad incapacidad = new Incapacidad();
                        incapacidad.atributos = leerAtributos(padre);
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.Incapacidades.Agregar(incapacidad);
                        break;
                     case "HorasExtras":
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.HorasExtras = new HorasExtras();
                        break;
                     case "HorasExtra":
                        HorasExtra horasExtra = new HorasExtra();
                        horasExtra.atributos = leerAtributos(padre);
                        nomina = cfdi.Complemento("nomina") as Nomina;
                        nomina.HorasExtras.Agregar(horasExtra);
                        break;
                  }
                  break;
               }
               case "ecc": {
                  switch(padre.LocalName) {
                        case "EstadoDeCuentaCombustible":
                        EstadoDeCuentaCombustible edoCta = new EstadoDeCuentaCombustible();
                        edoCta.atributos = leerAtributos(padre);
                        cfdi.AgregarComplemento(edoCta);
                        break;
                     case "Conceptos":
                        EstadoDeCuentaCombustible combustible = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                        combustible.conceptos = new ConceptosEstadoDeCuentaCombustibles();
                        break;
                     case "ConceptoEstadoDeCuentaCombustible":
                        ConceptoEstadoDeCuenta concepto = new ConceptoEstadoDeCuenta();
                        concepto.atributos = leerAtributos(padre);
                        combustible = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                        combustible.Agregar(concepto);
                        break;
                     case "Traslados":
                        combustible = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                        combustible.conceptos[combustible.conceptos.Elementos - 1].traslados = new TrasladosConceptosEstadoDeCuentaCombustible();
                        break;
                     case "Traslado":
                        TrasladoEstadoDeCuentaCombustible traslado = new TrasladoEstadoDeCuentaCombustible();
                        traslado.atributos = leerAtributos(padre);
                        combustible = cfdi.Complemento("combustible") as EstadoDeCuentaCombustible;
                        combustible.conceptos[combustible.conceptos.Elementos - 1].AgregaTraslado(traslado);
                        break;
                  }
                  break;
               }
               case "implocal": {
                  switch(padre.LocalName) {
                     case "ImpuestosLocales":
                        ImpuestosLocales implocal = new ImpuestosLocales();
                        implocal.atributos = leerAtributos(padre);
                        cfdi.AgregarComplemento(implocal);
                        break;
                  }
                  break;
               }
             }

             // Procesamos los nodos hijos
             for(int i = 0; i < padre.ChildNodes.Count; i++) {
            if(padre.ChildNodes[i].NodeType == XmlNodeType.Element) {
               LeerNodos(padre.ChildNodes[i]);
            }
             }
        }
 public void Agregar(Deduccion deduccion)
 {
     deducciones.Add(deduccion);
 }