Leer datos XML directo desde MySQL (ejemplo factura electrónica CFDi 3.3)

Leer datos XML directo desde MySQL (ejemplo factura electrónica CFDi 3.3)

Tenemos una tabla con los registros (cfd) y una con el xml como un blob o text, la estructura que yo uso es así:

Leer datos XML directo desde MySQL (ejemplo factura electrónica CFDi 3.3)

y luego para hacer una consulta básica sería algo como esto:

SELECT F.id,F.fechadoc, extractValue(R.dataxml,'//cfdi:Complemento/tfd:TimbreFiscalDigital/@UUID') , extractValue(R.dataxml,'//cfdi:Comprobante/cfdi:Emisor/@Rfc') as "RFC Emisor", extractValue(R.dataxml,'//cfdi:Comprobante/cfdi:Emisor/@Nombre') as "Emisor", extractValue(dataxml,'//cfdi:Conceptos/cfdi:Concepto/@Importe') as Monto, extractValue(dataxml,'//cfdi:Conceptos/cfdi:Concepto/@Descripcion') as Concepto FROM cfd F, cfdRaw R WHERE F.id = R.id AND F.id=127

Es todo, algo como lo anterior me regresa la consulta de la imagen. Así, directamente podemos interactuar con la estructura de las facturas CFDi 3.3 que se emiten y valida el SAT. Lo bueno: evitar crear campos para cada cosa cuando se manejan facturas XML, lo malo es que MySQL en versiones menores a 5.7 tratan las consultas como un texto normal, me parece que en la 5.7 ya se pueden crear índices sobre datos específicos del XML.

Estoy trabajando en un proyecto para llevar tus facturas personales de forma fácil y que puedas invitar a tu contador luego a que las revise, descargue, consulte, busque, etcétera, todo en un mismo lugar, evitando pérdida de documentos o andar intercambiando correos interminables. El proyecto está muy verde aún - CONTA es posible entrar con tu cuenta de Facebook.

+ fotos / videos

https://panchito-kardashian.tar.mx/media/2017/12/consultaXMLdb.jpg

Almacenado en Base de Datos, MySQL, Facturación Electrónica

por Jorge Martínez Mauricio :)

blog / fotos / archivo

Leer datos XML directo desde MySQL (ejemplo factura electrónica CFDi 3.3)

tar.mx es un blog sobre fotografía, tecnología y otras chunches

modificado viernes 16 de julio de 2021, 13:46

cuentame