require 'nokogiri'
class Factura
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL ENCABEZADO :::::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def AbrirFact()
f = File.open("fac23861.xml")
#f = File.open("#{facturaxml}")
doc = Nokogiri::XML(f)
@final=doc
#@final=doc.remove_namespaces!
end
def LugarExpedicion()
folio=@final.xpath("//@LugarExpedicion").to_s
end
def Moneda()
folio=@final.xpath("//@Moneda").to_s
end
def Certificado()
folio=@final.xpath("//@certificado").to_s
end
def Folio()
folio=@final.xpath("//@folio").to_s
end
def FormaDePago()
folio=@final.xpath("//@formaDePago").to_s
end
def MetodoDePago()
folio=@final.xpath("//@metodoDePago").to_s
end
def NoCertificado()
folio=@final.xpath("//@noCertificado").to_s
end
def CondicionesDePago()
folio=@final.xpath("//@condicionesDePago").to_s
end
def Fecha()
folio=@final.xpath("//@fecha").to_s
end
def Sello()
folio=@final.xpath("//@sello").to_s
end
def Serie()
folio=@final.xpath("//@serie").to_s
end
def SubTotal()
folio=@final.xpath("//@subTotal").to_s
end
def TipoDeComprobante()
folio=@final.xpath("//@tipoDeComprobante").to_s
end
def Total()
folio=@final.xpath("//@total").to_s
end
def Version()
folio=@final.xpath("//@version").to_s
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL EMISOR :::::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def NombreEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor//@nombre')
end
def RfcEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor//@rfc')
end
def CalleEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@calle')
end
def CodigoPostalEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@codigoPostal')
end
def ColoniaEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@colonia')
end
def EstadoEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@estado')
end
def MunicipioEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@municipio')
end
def PaisEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@pais')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL RECEPTOR :::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def NombreRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor//@nombre')
end
def RfcRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor//@rfc')
end
def CalleRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@calle')
end
def CodigoPostalRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@codigoPostal')
end
def ColoniaRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@colonia')
end
def EstadoRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@estado')
end
def MunicipioRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@municipio')
end
def PaisRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@pais')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DE LOS CONCEPTOS :::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def CantidadConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@cantidad')
end
def DescripcionConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@descripcion')
end
def ImporteConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@importe')
end
def NoIdentificacionConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@noIdentificacion')
end
def UnidadConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@unidad')
end
def ValorUnitarioConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@valorUnitario')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DE LOS IMPUESTOS :::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#IMPUESTOS TRASLADADOS FACTURA NORMAL
def ImporteImpuesTras
@final.xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado//@importe')
end
def ImpuestoImpuesTras
@final.xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado//@impuesto')
end
def TasaImpuesTras
@final.xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado//@tasa')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL COMPLEMENTO ::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#TIMBRE FISCAL
def VersionTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@version')
end
def UUIDTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@UUID')
end
def FechaTimbradoTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@FechaTimbrado')
end
def SelloCFDTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@selloCFD')
end
def NoCertificadoSATTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@noCertificadoSAT')
end
def SelloSATTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@selloSAT')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DE LA ADDENDA ::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def DatoAddenda
@final.xpath('/cfdi:Comprobante/cfdi:Addenda//@dato')
end
def TituloAddenda
@final.xpath('/cfdi:Comprobante/cfdi:Addenda//@titulo')
end
end
abj = Factura.new()
abj.AbrirFact
#Cuenta cuantos elementos hay en el arreglo
puts abj.LugarExpedicion
puts abj.Moneda
puts abj.Certificado
puts abj.Folio
puts abj.FormaDePago
puts abj.MetodoDePago
puts abj.NoCertificado
puts abj.CondicionesDePago
puts abj.Fecha
puts abj.Sello
puts abj.Serie
puts abj.SubTotal
puts abj.TipoDeComprobante
puts abj.Total
puts abj.Version
puts abj.NombreEmi
puts abj.RfcEmi
puts abj.CalleEmi
puts abj.CodigoPostalEmi
puts abj.ColoniaEmi
puts abj.EstadoEmi
puts abj.MunicipioEmi
puts abj.PaisEmi
puts abj.NombreRecep
puts abj.RfcRecep
puts abj.CalleRecep
puts abj.CodigoPostalRecep
puts abj.ColoniaRecep
puts abj.EstadoRecep
puts abj.MunicipioRecep
puts abj.PaisRecep
puts abj.CantidadConcep
puts abj.DescripcionConcep
puts abj.ImporteConcep
puts abj.NoIdentificacionConcep
puts abj.UnidadConcep
puts abj.ValorUnitarioConcep
puts abj.ImporteImpuesTras
puts abj.ImpuestoImpuesTras
puts abj.TasaImpuesTras
puts abj.VersionTimbFisc
puts abj.UUIDTimbFisc
puts abj.FechaTimbradoTimbFisc
puts abj.SelloCFDTimbFisc
puts abj.NoCertificadoSATTimbFisc
puts abj.SelloSATTimbFisc
puts abj.DatoAddenda
puts abj.TituloAddenda
#Cuenta el total de los elementos del arreglo
puts abj.Addenda.length
#Imprimimos todos los elemnetos del arreglo
abj.Addenda.each do |cantidad|
puts cantidad
end
class Factura
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL ENCABEZADO :::::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def AbrirFact()
f = File.open("fac23861.xml")
#f = File.open("#{facturaxml}")
doc = Nokogiri::XML(f)
@final=doc
#@final=doc.remove_namespaces!
end
def LugarExpedicion()
folio=@final.xpath("//@LugarExpedicion").to_s
end
def Moneda()
folio=@final.xpath("//@Moneda").to_s
end
def Certificado()
folio=@final.xpath("//@certificado").to_s
end
def Folio()
folio=@final.xpath("//@folio").to_s
end
def FormaDePago()
folio=@final.xpath("//@formaDePago").to_s
end
def MetodoDePago()
folio=@final.xpath("//@metodoDePago").to_s
end
def NoCertificado()
folio=@final.xpath("//@noCertificado").to_s
end
def CondicionesDePago()
folio=@final.xpath("//@condicionesDePago").to_s
end
def Fecha()
folio=@final.xpath("//@fecha").to_s
end
def Sello()
folio=@final.xpath("//@sello").to_s
end
def Serie()
folio=@final.xpath("//@serie").to_s
end
def SubTotal()
folio=@final.xpath("//@subTotal").to_s
end
def TipoDeComprobante()
folio=@final.xpath("//@tipoDeComprobante").to_s
end
def Total()
folio=@final.xpath("//@total").to_s
end
def Version()
folio=@final.xpath("//@version").to_s
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL EMISOR :::::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def NombreEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor//@nombre')
end
def RfcEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor//@rfc')
end
def CalleEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@calle')
end
def CodigoPostalEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@codigoPostal')
end
def ColoniaEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@colonia')
end
def EstadoEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@estado')
end
def MunicipioEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@municipio')
end
def PaisEmi
@final.xpath('/cfdi:Comprobante/cfdi:Emisor/cfdi:DomicilioFiscal//@pais')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL RECEPTOR :::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def NombreRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor//@nombre')
end
def RfcRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor//@rfc')
end
def CalleRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@calle')
end
def CodigoPostalRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@codigoPostal')
end
def ColoniaRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@colonia')
end
def EstadoRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@estado')
end
def MunicipioRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@municipio')
end
def PaisRecep
@final.xpath('/cfdi:Comprobante/cfdi:Receptor/cfdi:Domicilio//@pais')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DE LOS CONCEPTOS :::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def CantidadConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@cantidad')
end
def DescripcionConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@descripcion')
end
def ImporteConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@importe')
end
def NoIdentificacionConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@noIdentificacion')
end
def UnidadConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@unidad')
end
def ValorUnitarioConcep
@final.xpath('/cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto//@valorUnitario')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DE LOS IMPUESTOS :::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#IMPUESTOS TRASLADADOS FACTURA NORMAL
def ImporteImpuesTras
@final.xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado//@importe')
end
def ImpuestoImpuesTras
@final.xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado//@impuesto')
end
def TasaImpuesTras
@final.xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado//@tasa')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DEL COMPLEMENTO ::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#TIMBRE FISCAL
def VersionTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@version')
end
def UUIDTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@UUID')
end
def FechaTimbradoTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@FechaTimbrado')
end
def SelloCFDTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@selloCFD')
end
def NoCertificadoSATTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@noCertificadoSAT')
end
def SelloSATTimbFisc
@final.xpath('/cfdi:Comprobante/cfdi:Complemento//@selloSAT')
end
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# :::::::::: DATOS DE LA ADDENDA ::::::::::::::::::::::::::::::::::::::::
# :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
def DatoAddenda
@final.xpath('/cfdi:Comprobante/cfdi:Addenda//@dato')
end
def TituloAddenda
@final.xpath('/cfdi:Comprobante/cfdi:Addenda//@titulo')
end
end
abj = Factura.new()
abj.AbrirFact
#Cuenta cuantos elementos hay en el arreglo
puts abj.LugarExpedicion
puts abj.Moneda
puts abj.Certificado
puts abj.Folio
puts abj.FormaDePago
puts abj.MetodoDePago
puts abj.NoCertificado
puts abj.CondicionesDePago
puts abj.Fecha
puts abj.Sello
puts abj.Serie
puts abj.SubTotal
puts abj.TipoDeComprobante
puts abj.Total
puts abj.Version
puts abj.NombreEmi
puts abj.RfcEmi
puts abj.CalleEmi
puts abj.CodigoPostalEmi
puts abj.ColoniaEmi
puts abj.EstadoEmi
puts abj.MunicipioEmi
puts abj.PaisEmi
puts abj.NombreRecep
puts abj.RfcRecep
puts abj.CalleRecep
puts abj.CodigoPostalRecep
puts abj.ColoniaRecep
puts abj.EstadoRecep
puts abj.MunicipioRecep
puts abj.PaisRecep
puts abj.CantidadConcep
puts abj.DescripcionConcep
puts abj.ImporteConcep
puts abj.NoIdentificacionConcep
puts abj.UnidadConcep
puts abj.ValorUnitarioConcep
puts abj.ImporteImpuesTras
puts abj.ImpuestoImpuesTras
puts abj.TasaImpuesTras
puts abj.VersionTimbFisc
puts abj.UUIDTimbFisc
puts abj.FechaTimbradoTimbFisc
puts abj.SelloCFDTimbFisc
puts abj.NoCertificadoSATTimbFisc
puts abj.SelloSATTimbFisc
puts abj.DatoAddenda
puts abj.TituloAddenda
#Cuenta el total de los elementos del arreglo
puts abj.Addenda.length
#Imprimimos todos los elemnetos del arreglo
abj.Addenda.each do |cantidad|
puts cantidad
end
Me ahorraste un montón de trabajo, gracias!
ResponderBorrar