SimpleXML仅解析顶级

时间:2013-09-05 20:13:03

标签: php xml simplexml

我现在已经挣扎了一段时间。我从Web服务获得响应,并将此XML作为响应。

然后我在php中使用SimpleXML加载它,但是当我打印它创建的数组时,它只解析父项而不是子项。

  <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>

有XML ...当你把它传递给php和print_r结果时,它看起来就像原版一样!许多元素都缺失了!

2 个答案:

答案 0 :(得分:4)

获取Lomas del Valle的示例。

var_dump((string)$xml->children('cfdi',true)->emisor->expedidoen->attributes()->calle);

请参阅这些页面 http://php.net/manual/en/simplexmlelement.children.php
http://php.net/manual/en/simplexmlelement.attributes.php

答案 1 :(得分:0)

好吧,我正在调查你的情况半小时,我找到了解决方案。问题是php解释标签名称(cfdi)直到双点。双点后,对于php就像属性一样。所以在你的情况下,如果你想解析它,你将需要使用没有键。

我对此案例的解决方案是:

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);