I've been struggling for a while now. I get a response from a webservice and I get this XML as a response.
I then load it with SimpleXML in php but when I print the array that it created, it only parses the parent and not the children.
<cfdi:comprobante certificado="MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU4NjcwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMjA3MjcxNzAyMDBaFw0xNjA3MjcxNzAyMDBaMIHbMSkwJwYDVQQDEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA1UEKRMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxKTAnBgNVBAoTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQFExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxETAPBgNVBAsTCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2TTQSPONBOVxpXv9wLYo8jezBrb34i/tLx8jGdtyy27BcesOav2c1NS/Gdv10u9SkWtwdy34uRAVe7H0a3VMRLHAkvp2qMCHaZc4T8k47Jtb9wrOEh/XFS8LgT4y5OQYo6civfXXdlvxWU/gdM/e6I2lg6FGorP8H4GPAJ/qCNwIDAQABox0wGzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEATxMecTpMbdhSHo6KVUg4QVF4Op2IBhiMaOrtrXBdJgzGotUFcJgdBCMjtTZXSlq1S4DG1jr8p4NzQlzxsdTxaB8nSKJ4KEMgIT7E62xRUj15jI49qFz7f2uMttZLNThipunsN/NF1XtvESMTDwQFvas/Ugig6qwEfSZc0MDxMpKLEkEePmQwtZD+zXFSMVa6hmOu4M+FzGiRXbj4YJXn9Myjd8xbL/c+9UIcrYoZskxDvMxc6/6M3rNNDY3OFhBK+V/sPMzWWGt8S1yjmtPfXgFs1t65AZ2hcTwTAuHrKwDatJ1ZPfa482ZBROAAX1waz7WwXp0gso7sDCm2/yUVww==" condicionesdepago="Opcional" fecha="2013-09-09T16:02:52" folio="1" formadepago="PAGO HECHO EN UNA SOLA EXHIBICION" lugarexpedicion="Monterrey" metododepago="No Identificado" moneda="MN" nocertificado="20001000000100005867" numctapago="No Identificada" sello="nWlPxq6j7lhoYirja9hIliM1cG2wNJr6LBlbINzK+Q4cdNjRZGbO95K7a3kvwXGLLw3FodiASPY3C08jXFoNnvpCuvKTuhSBsAJ367AvNFvDnxPqlS8m3g4PAeA6dntvQvBaXHDFRgag1OpYmvu/jd0bksFexjDHktWIp84w2nU=" serie="A" subtotal="157.500000" tipodecomprobante="ingreso" total="182.700000" version="3.2" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd">
<cfdi:emisor nombre="CONCENTRICO SAPI DE CV" rfc="AAA010101AAA">
<cfdi:domiciliofiscal calle="Lomas del Valle" codigopostal="12345" colonia="Residencial Sta. Barbara" estado="Nuevo Leon" localidad="Localidad" municipio="San Pedro" noexterior="456" nointerior="2A" pais="Mexico" referencia="referencia">
</cfdi:domiciliofiscal>
<cfdi:expedidoen calle="Lomas del Valle" codigopostal="12345" colonia="Residencial Sta. Barbara" estado="Nuevo Leon" localidad="Localidad" municipio="San Pedro" noexterior="456" nointerior="2A" pais="Mexico" referencia="referencia">
</cfdi:expedidoen>
<cfdi:regimenfiscal regimen="Requerido">
</cfdi:regimenfiscal>
<cfdi:regimenfiscal regimen="Requerido">
</cfdi:regimenfiscal>
</cfdi:emisor>
<cfdi:receptor nombre="CONCENTRICO SAPI DE CV" rfc="CON1108174T9">
<cfdi:domicilio calle="Lomas del Valle" codigopostal="12345" colonia="Residencial Sta. Barbara" estado="Nuevo Leon" localidad="Localidad" noexterior="456" nointerior="2A" pais="Mexico" referencia="referencia">
</cfdi:domicilio>
</cfdi:receptor>
<cfdi:conceptos>
<cfdi:concepto cantidad="1.000000" descripcion="Renta de Departamento" importe="100.000000" unidad="Renta" valorunitario="100.000000">
</cfdi:concepto>
<cfdi:concepto cantidad="1.000000" descripcion="Renta de Departamento" importe="105.000000" unidad="Renta" valorunitario="105.000000">
</cfdi:concepto>
<cfdi:concepto cantidad="1.000000" descripcion="Renta de Departamento" importe="110.000000" unidad="Renta" valorunitario="110.000000">
</cfdi:concepto>
</cfdi:conceptos>
<cfdi:impuestos totalimpuestosretenidos="0.000000" totalimpuestostrasladados="25.200000">
<cfdi:retenciones>
<cfdi:retencion importe="0.000000" impuesto="IVA">
</cfdi:retencion>
<cfdi:retencion importe="0.000000" impuesto="ISR">
</cfdi:retencion>
</cfdi:retenciones>
<cfdi:traslados>
<cfdi:traslado importe="25.500000" impuesto="IVA" tasa="16">
</cfdi:traslado>
</cfdi:traslados>
</cfdi:impuestos>
<cfdi:complemento>
<tfd:timbrefiscaldigital fechatimbrado="2013-09-03T16:27:17" nocertificadosat="20001000000100005867" sellocfd="nWlPxq6j7lhoYirja9hIliM1cG2wNJr6LBlbINzK+Q4cdNjRZGbO95K7a3kvwXGLLw3FodiASPY3C08jXFoNnvpCuvKTuhSBsAJ367AvNFvDnxPqlS8m3g4PAeA6dntvQvBaXHDFRgag1OpYmvu/jd0bksFexjDHktWIp84w2nU=" sellosat="iC/lFA0TABo5q8oad0tLgqdSSi9qdpmazyeYBjaYYUJc62qxiBUOcg7TF03lYYZzACqMmuXXvTRV8YGqoOAp6KvrioEIc5L3FCdkpqb3pxc/ReHUtp8cabKBpRfJ/clmWVXc0blBiZPe+0TtTE/n/aK6HOf4qyl1Z2T4CpfSO0w=" uuid="PRUEBAXX-XXXX-XXXX-XXXX-TIMBREPRUEBA" version="1.0" xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemalocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/sitio_internet/TimbreFiscalDigital/TimbreFiscalDigital.xsd">
</tfd:timbrefiscaldigital>
</cfdi:complemento>
</cfdi:comprobante>
There is the XML...when you pass it to php and print_r the result, it looks nothing like the original! Many elements are missing!
Example for getting Lomas del Valle
.
var_dump((string)$xml->children('cfdi',true)->emisor->expedidoen->attributes()->calle);
See these pages.
http://php.net/manual/en/simplexmlelement.children.php
http://php.net/manual/en/simplexmlelement.attributes.php
Well, i was looking into your case for a half of hour, and i found solution. The problem is that php interprets tag name (cfdi) till double dots. after double dots, for php is like attribute. so in your case, if you want to parse it, you will need to use without keys.
my solution for this case is:
xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $simple_xml_string, $array_of_values, $array_of_index);
xml_parser_free($xml_parser);
var_dump($array_of_values);