Close

PHP: Recorrer Nodos de XML del CFDI 3.2

anexo20CFDI_desarrollohidrocalido
Anexo20: Un dolor de cabeza traes leerlo completamente para hacer tu CFDI

Con el siguiente código nosotros podemos recorrer un XML  y obtener sus atributos definiendo al nodo al que pertenecen para así obtener el namespace que se nos de la gana.

Un pequeño fragmento de nuestro XML:

La clave para recorrerlo:

 Conclusión: En un post Anterior  muestro como recorrer un XML del CFDI, pero no puedes recorrer todos los nodos del CFDI más que el nodo TimbreFiscalDigital, pero con este método que les acabo de colocar, podemos recorrerlo COMPLETAMENTE!.

14 thoughts on “PHP: Recorrer Nodos de XML del CFDI 3.2

    1. Hola gereval, como lo estas intentando de leer?
      la forma en la que yo lo haría seria la siguiente :
      foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Complemento//tdf:TimbreFiscalDigital') as $valor){
      $selloCFD = $valor['selloCFD'];
      $selloSAT = $valor['selloSAT'];
      // los ddemas valor que deseas leer ....
      }

      1. De hecho no entra por alguna razón a ese nodo para leer los valores del XML, y requiero sacar el valor de «UUID».

      2. Hola, espero que hallas encontrado la respuesta…si no, aquí te la dejo…

        $xml = new SimpleXMLElement ($TempXML,null,true);
        $namespaces = $xml->getDocNamespaces(true);
        $xml->registerXPathNamespace(‘tfd’,$namespaces[‘tfd’]);

        foreach ($xml ->xpath(‘//tfd:TimbreFiscalDigital’) as $val)
        {
        $UUID=$val[‘UUID’]’;
        }

        Saludos.

  1. Bueno espero que le pueda ayudar a alguien intentando pagar la moneda.
    Al seguir en mi proyecto me di cuenta que tengo facturas con mas de un concepto de pago. yo para recorrerlo bajo mi capacidad claro

    $ArrayConceptos;
    foreach ($xml->xpath(‘//cfdi:Comprobante//cfdi:Conceptos//cfdi:Concepto’) as $Concepto){
    $ArrayConceptos[] = $Concepto;
    }
    //Conocer cuantos conceptos nos guardo
    $Totales = count($ArryaConceptos);

    //Recorrer un en especifico ya depende de su implementación 0 para el primero pero podrías usar un for
    $ArrayConceptos[0][‘noIdentificacion’]; // solo es un ejemplo de obtener el identificador del primer concepto
    $ArrayConceptos[1][‘noIdentificacion’]; // solo es un ejemplo de obtener el identificador del segundo concepto

    intente no implementar nada para que quede mas claro para otros usuarios

    Saludos y sigamos trabajando por Mexico!

  2. buenas tardes, tengo una pregunta, si quisiera eliminar el namespace tfd:TimbreFiscalDigital con todos sus atributos de un CFDI como lo podria hacer
    el objetivo de eliminar el timbre del xmles porque tengo un cliente que sus facturas son repetitivas cada cierto tiempo y en vez de volver a capturar todos los datos, solo quiere volver a timbrar el mismo xml, obviamente ya actualiza el sello y la fecha de elaboracion ero elimino manualmente el nodo del timbre

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.