-
-
Save goedecke/03e9c7c178ff947b1e9d9eaea4bbe369 to your computer and use it in GitHub Desktop.
<?php | |
$xml = simplexml_load_file('test.xml'); | |
$ns = $xml->getNamespaces(true); | |
$xml->registerXPathNamespace('c', $ns['cfdi']); | |
$xml->registerXPathNamespace('t', $ns['tfd']); | |
//EMPIEZO A LEER LA INFORMACION DEL CFDI E IMPRIMIRLA | |
foreach ($xml->xpath('//cfdi:Comprobante') as $cfdiComprobante){ | |
echo $cfdiComprobante['version']; | |
echo "<br />"; | |
echo $cfdiComprobante['fecha']; | |
echo "<br />"; | |
echo $cfdiComprobante['sello']; | |
echo "<br />"; | |
echo $cfdiComprobante['total']; | |
echo "<br />"; | |
echo $cfdiComprobante['subTotal']; | |
echo "<br />"; | |
echo $cfdiComprobante['certificado']; | |
echo "<br />"; | |
echo $cfdiComprobante['formaDePago']; | |
echo "<br />"; | |
echo $cfdiComprobante['noCertificado']; | |
echo "<br />"; | |
echo $cfdiComprobante['tipoDeComprobante']; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor') as $Emisor){ | |
echo $Emisor['rfc']; | |
echo "<br />"; | |
echo $Emisor['nombre']; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:DomicilioFiscal') as $DomicilioFiscal){ | |
echo $DomicilioFiscal['pais']; | |
echo "<br />"; | |
echo $DomicilioFiscal['calle']; | |
echo "<br />"; | |
echo $DomicilioFiscal['estado']; | |
echo "<br />"; | |
echo $DomicilioFiscal['colonia']; | |
echo "<br />"; | |
echo $DomicilioFiscal['municipio']; | |
echo "<br />"; | |
echo $DomicilioFiscal['noExterior']; | |
echo "<br />"; | |
echo $DomicilioFiscal['codigoPostal']; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:ExpedidoEn') as $ExpedidoEn){ | |
echo $ExpedidoEn['pais']; | |
echo "<br />"; | |
echo $ExpedidoEn['calle']; | |
echo "<br />"; | |
echo $ExpedidoEn['estado']; | |
echo "<br />"; | |
echo $ExpedidoEn['colonia']; | |
echo "<br />"; | |
echo $ExpedidoEn['noExterior']; | |
echo "<br />"; | |
echo $ExpedidoEn['codigoPostal']; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Receptor') as $Receptor){ | |
echo $Receptor['rfc']; | |
echo "<br />"; | |
echo $Receptor['nombre']; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Receptor//cfdi:Domicilio') as $ReceptorDomicilio){ | |
echo $ReceptorDomicilio['pais']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['calle']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['estado']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['colonia']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['municipio']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['noExterior']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['noInterior']; | |
echo "<br />"; | |
echo $ReceptorDomicilio['codigoPostal']; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Conceptos//cfdi:Concepto') as $Concepto){ | |
echo "<br />"; | |
echo $Concepto['unidad']; | |
echo "<br />"; | |
echo $Concepto['importe']; | |
echo "<br />"; | |
echo $Concepto['cantidad']; | |
echo "<br />"; | |
echo $Concepto['descripcion']; | |
echo "<br />"; | |
echo $Concepto['valorUnitario']; | |
echo "<br />"; | |
echo "<br />"; | |
} | |
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Traslados//cfdi:Traslado') as $Traslado){ | |
echo $Traslado['tasa']; | |
echo "<br />"; | |
echo $Traslado['importe']; | |
echo "<br />"; | |
echo $Traslado['impuesto']; | |
echo "<br />"; | |
echo "<br />"; | |
} | |
//ESTA ULTIMA PARTE ES LA QUE GENERABA EL ERROR | |
foreach ($xml->xpath('//t:TimbreFiscalDigital') as $tfd) { | |
echo $tfd['selloCFD']; | |
echo "<br />"; | |
echo $tfd['FechaTimbrado']; | |
echo "<br />"; | |
echo $tfd['UUID']; | |
echo "<br />"; | |
echo $tfd['noCertificadoSAT']; | |
echo "<br />"; | |
echo $tfd['version']; | |
echo "<br />"; | |
echo $tfd['selloSAT']; | |
} | |
?> |
Es posible leer varios archivos desde un input ? eso ya lo hice solamente con un archivo , necesito extraer información de cada uno de ellos para poder hacer un varios análisis de los ingresos y egresos supongo que es con un foreach o sera mejor subir los archivos a una carpeta y leerlos todos ?
Me fue útil para solucionar un problema en especifico con un nodo en la versión 4.0, muchas gracias.
Me fue útil para solucionar un problema en especifico con un nodo en la versión 4.0, muchas gracias.
ejemplo..., cómo fue tu escenario?
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Traslados//cfdi:Traslado') as $traslados) {
$t.= (string)$traslados['TipoFactor'] .'-' .(string)$traslados['TasaOCuota'].(string)$traslados['Importe'].'
';
}
Estoy tratando de leer los traslados dentro de impuestos pero tambien me trae los traslados de los conceptos a pesar de que especifico el xpath...
Buenas! alguna actualizacion para que acepte la version 4 o mayor?
Esto me funciono para extraer el UUID del xml con la version 4.0
$uuid = (string) $xml->xpath('//tfd:TimbreFiscalDigital/@uuid')[0];
Entiendo. Prefiero claridad en la implementación (que sea sencillo para el equipo de trabajo), y lo del consumo de memoria pues es relativo, como bien mencionas; depende del tamaño de documentos a leer (¿facturas de 50Mb?) y lo del # de items a extraer, pues.
En fin, fue solo un aporte que muestra que cada quien tiene una visión distinta para lograr sus objetivos. Saludos.
Estoy de acuerdo con esto, implementé tu solución para un detalle específico que tenía accediendo a atributos anidados, te agradezco el aporte.
Buenas, tengo un problemita a la hora de tratar de agregar otro xpath un ejemplo seria este $xml->registerXPathNamespace('n', $ns['nomina12']);
No me detecta lo que vendria siendo la key de nomina12 apesar de que este aparezca en los xml, estoy empezando en esto y se me hace algo confuso, un saludo y muchas gracias