Foros del Web » Programando para Internet » PHP »

Problemas al leer XML con SIMPLEXML

Estas en el tema de Problemas al leer XML con SIMPLEXML en el foro de PHP en Foros del Web. Hola buen dia estoy trabajando en como leer el contenido de un XML en PHP con simplexml, concretamente con la funcion simplexml_load_string(). Toda la informacion ...
  #1 (permalink)  
Antiguo 22/02/2012, 02:11
 
Fecha de Ingreso: diciembre-2008
Mensajes: 3
Antigüedad: 15 años, 10 meses
Puntos: 2
Problemas al leer XML con SIMPLEXML

Hola buen dia
estoy trabajando en como leer el contenido de un XML en PHP con simplexml, concretamente con la funcion simplexml_load_string().
Toda la informacion es leida corerctamente, solo que al acceder al ultimo nodo (o namespace) y sus nodos anidados me regresa este error

Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: Undefined namespace prefix in C:\xampp\htdocs\factura_electronica\XML.php on line 110

Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: xmlXPathEval: evaluation failed in C:\xampp\htdocs\factura_electronica\XML.php on line 110

El codigo que utilizo es el siguiente:

Código PHP:
<?
$link 
mysql_connect("localhost""root""");
mysql_select_db("prueba");
$sql "SELECT archivo FROM archivos WHERE id=1"//EL XML ESTA GUARDADO EN UN CAMPO LONGBLOB LLAMADO archivo
$res mysql_query($sql$link);
$row mysql_fetch_array($res);
$xml simplexml_load_string($row["archivo"]);
//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 />";
}
//HASTA AQUI TODA LA INFORMACION ES LEIDA E IMPRESA CORRECTAMENTE
//ESTA ULTIMA PARTE ES LA QUE GENERA ERROR, AL PARECER NO ENCUENTRA EL NODO
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Complemento//tfd:TimbreFiscalDigital') as $TimbreFiscalDigital){
   echo 
$TimbreFiscalDigital['selloCFD'];
   echo 
"<br />";
   echo 
$TimbreFiscalDigital['FechaTimbrado'];
   echo 
"<br />";
   echo 
$TimbreFiscalDigital['UUID'];
   echo 
"<br />";
   echo 
$TimbreFiscalDigital['noCertificadoSAT'];
   echo 
"<br />";
   echo 
$TimbreFiscalDigital['version'];
   echo 
"<br />";
   echo 
$TimbreFiscalDigital['selloSAT'];
   echo 
"<br />";
}
?>
Ya cheque la documentacion de PHP sobre simplexml pero no logro encontrar la forma de acceder a este ultimo nodo del XML, espero alguien ya haya trabajado esta funcion para una aplicacion similar y me diga que estoy implementando mal.
El contenido del arcihvo XML es el siguiente
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 cfdv3.xsd" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" fecha="2010-03-06T20:38:12" sello="tOSe+Ex/wvn33YlGwtfmrJwQ31Crd7lI9VcH63TGjHfxk5vfb3q9uSbDUGk9TXvo70ydOpikRVw+9B2Six0mbu3PjoPpO909oAYITrRyomdeUGJ4vmA2/12L86EJLWpU7vIt4cL8HpkEw7TOFhSdpzb/890+jP+C1adBsHU1VHc=" total="488.50" subTotal="488.50" certificado="MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHBydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBUcmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2VndXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXNpc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbGdvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBAcMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJKoZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2lnYTAeFw0xMDA3MzAxNjU4NDBaFw0xMjA3MjkxNjU4NDBaMIGWMRIwEAYDVQQDDAlNYXRyaXogU0ExEjAQBgNVBCkMCU1hdHJpeiBTQTESMBAGA1UECgwJTWF0cml6IFNBMSUwIwYDVQQtExxBQUEwMTAxMDFBQUEgLyBBQUFBMDEwMTAxQUFBMR4wHAYDVQQFExUgLyBBQUFBMDEwMTAxSERGUlhYMDExETAPBgNVBAsMCFVuaWRhZCAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDD0ltQNthUNUfzq0t1GpIyapjzOn1W5fGM5G/pQyMluCzP9YlVAgBjGgzwYp9Z0J9gadg3y2ZrYDwvv8b72goyRnhnv3bkjVRKlus6LDc00K7Jl23UYzNGlXn5+i0HxxuWonc2GYKFGsN4rFWKVy3Fnpv8Z2D7dNqsVyT5HapEqwIDAQABo4HqMIHnMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMB0GA1UdDgQWBBSYodSwRczzj5H7mcO3+mAyXz+y0DAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vcGtpLnNhdC5nb2IubXgvc2F0LmNybDAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLnNhdC5nb2IubXgvMB8GA1UdIwQYMBaAFOtZfQQimlONnnEaoFiWKfU54KDFMBAGA1UdIAQJMAcwBQYDKgMEMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4IBAQArHQEorApwqumSn5EqDOAjbezi8fLco1cYES/PD+LQRM1Vb1g7VLE3hR4S5NNBv0bMwwWAr0WfL9lRRj0PMKLorO8y4TJjRU8MiYXfzSuKYL5Z16kW8zlVHw7CtmjhfjoIMwjQo3prifWxFv7VpfIBstKKShU0qB6KzUUNwg2Ola4t4gg2JJcBmyIAIInHSGoeinR2V1tQ10aRqJdXkGin4WZ75yMbQH4L0NfotqY6bpF2CqIY3aogQyJGhUJji4gYnS2DvHcyoICwgawshjSaX8Y0Xlwnuh6EusqhqlhTgwPNAPrKIXCmOWtqjlDhho/lhkHJMzuTn8AoVapbBUn" formaDePago="PAGO EN UNA SOLA EXHIBICION" noCertificado="30001000000100000800" tipoDeComprobante="ingreso">
  3.     <cfdi:Emisor rfc="PPL961114GZ1" nombre="PHARMA PLUS SA DE CV">
  4.         <cfdi:DomicilioFiscal pais="Mexico" calle="AV. RIO MIXCOAC" estado="MEXICO, D.F." colonia="ACACIAS" municipio="BENITO JUAREZ" noExterior="No. 140" codigoPostal="03240"/>
  5.         <cfdi:ExpedidoEn pais="Mexico" calle="AV. UNIVERSIDAD" estado="DISTRITO FEDERAL" colonia="OXTOPULCO" noExterior="1858" codigoPostal="03910"/>
  6.     </cfdi:Emisor>
  7.     <cfdi:Receptor rfc="PEPJ8001019Q8" nombre="JUAN PEREZ PEREZ">
  8.         <cfdi:Domicilio pais="Mexico" calle="AV UNIVERSIDAD" estado="DISTRITO FEDERAL" colonia="COPILCO UNIVERSIDAD" municipio="COYOACAN" noExterior="16 EDF 3" noInterior="DPTO 101" codigoPostal="04360"/>
  9.     </cfdi:Receptor>
  10.     <cfdi:Conceptos>
  11.         <cfdi:Concepto unidad="CAPSULAS" importe="244.00" cantidad="1.0" descripcion="VIBRAMICINA 100MG 10" valorUnitario="244.00"/>
  12.         <cfdi:Concepto unidad="BOTELLA" importe="137.93" cantidad="1.0" descripcion="CLORUTO 500M" valorUnitario="137.93"/>
  13.         <cfdi:Concepto unidad="TABLETAS" importe="84.50" cantidad="1.0" descripcion="SEDEPRON 250MG 10" valorUnitario="84.50"/>
  14.     </cfdi:Conceptos>
  15.     <cfdi:Impuestos>
  16.         <cfdi:Traslados>
  17.             <cfdi:Traslado tasa="0.00" importe="0.00" impuesto="IVA"/>
  18.             <cfdi:Traslado tasa="16.00" importe="22.07" impuesto="IVA"/>
  19.         </cfdi:Traslados>
  20.     </cfdi:Impuestos>
  21.     <cfdi:Complemento>
  22.         <tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital TimbreFiscalDigital.xsd" selloCFD="tOSe+Ex/wvn33YlGwtfmrJwQ31Crd7lI9VcH63TGjHfxk5vfb3q9uSbDUGk9TXvo70ydOpikRVw+9B2Six0mbu3PjoPpO909oAYITrRyomdeUGJ4vmA2/12L86EJLWpU7vIt4cL8HpkEw7TOFhSdpzb/890+jP+C1adBsHU1VHc=" FechaTimbrado="2010-03-06T20:40:10" UUID="ad662d33-6934-459c-a128-bdf0393e0f44" noCertificadoSAT="30001000000100000801" version="1.0" selloSAT="j5bSpqM3w0+shGtImqOwqqy6+d659O78ckfstu5vTSFa+2CVMj6Awfr18x4yMLGBwk6ruYbjBlVURodEIl6nJIhTTUtYQV1cbRDG9kvvhaNAakxqaSOnOx79nHxqFPRVoqh10CsjocS9PZkSM2jz1uwLgaF0knf1g8pjDkLYwlk="/>
  23.     </cfdi:Complemento>
  24.     <cfdi:Addenda/>
  25. </cfdi:Comprobante>
  #2 (permalink)  
Antiguo 23/02/2012, 02:44
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Problemas al leer XML con SIMPLEXML

Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: Undefined namespace prefix in C:\xampp\htdocs\factura_electronica\XML.php on line 110

Warning: SimpleXMLElement::xpath() [simplexmlelement.xpath]: xmlXPathEval: evaluation failed in C:\xampp\htdocs\factura_electronica\XML.php on line 110


Te faltan los namespaces a los que haces referencia en la línea 110.
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 23/02/2012, 02:50
 
Fecha de Ingreso: diciembre-2008
Mensajes: 3
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problemas al leer XML con SIMPLEXML

No entiendo el porque, accedo a la informacion de todos los nodos de la misma manera, no importando que tan anidados esten dentro del XML, solo en esa linea me dice que no tengo definido el prefijo del namespace, pero la verdad no se porque solo ahi tira el error.
¿Podrias elaborar mas tu explicacion?
  #4 (permalink)  
Antiguo 23/02/2012, 12:03
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Problemas al leer XML con SIMPLEXML

El error es porque no te está encontrando el namespace tfd, y según repara2 te faltan pero esto no es cierto porque se puede encontrar en la misma línea.

Lo puedes solucionar así:

Código PHP:
Ver original
  1. <?php
  2. $sxe = new SimpleXMLElement($xml);
  3. $ns = $sxe->getNamespaces(true);
  4. $sxe->registerXPathNamespace('c', $ns['cfdi']);
  5. $sxe->registerXPathNamespace('t', $ns['tfd']);
  6.  
  7. foreach ($sxe->xpath('//t:TimbreFiscalDigital') as $tfd) {
  8.     echo "{$tfd['selloCFD']}<br />";
  9.     echo "{$tfd['FechaTimbrado']}<br />";
  10.     echo "{$tfd['UUID']}<br />";
  11.     echo "{$tfd['noCertificadoSAT']}<br />";
  12.     echo "{$tfd['version']}<br />";
  13.     echo "{$tfd['selloSAT']}<br />";
  14. }

c es un alias de cfdi y t es un alias de tfd.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 08/06/2012, 12:53
Avatar de ing_efrain  
Fecha de Ingreso: junio-2012
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Problemas al leer XML con SIMPLEXML

Gracias por todo, me ha servido mucho.
Quisiera dejar el código completo como ya funciona para aquellos a quienes les interese.


Código PHP:
Ver original
  1. <?php
  2. $xml = simplexml_load_file('test.xml');
  3. $ns = $xml->getNamespaces(true);
  4. $xml->registerXPathNamespace('c', $ns['cfdi']);
  5. $xml->registerXPathNamespace('t', $ns['tfd']);
  6.  
  7.  
  8. //EMPIEZO A LEER LA INFORMACION DEL CFDI E IMPRIMIRLA
  9. foreach ($xml->xpath('//cfdi:Comprobante') as $cfdiComprobante){
  10.       echo $cfdiComprobante['version'];
  11.       echo "<br />";
  12.       echo $cfdiComprobante['fecha'];
  13.       echo "<br />";
  14.       echo $cfdiComprobante['sello'];
  15.       echo "<br />";
  16.       echo $cfdiComprobante['total'];
  17.       echo "<br />";
  18.       echo $cfdiComprobante['subTotal'];
  19.       echo "<br />";
  20.       echo $cfdiComprobante['certificado'];
  21.       echo "<br />";
  22.       echo $cfdiComprobante['formaDePago'];
  23.       echo "<br />";
  24.       echo $cfdiComprobante['noCertificado'];
  25.       echo "<br />";
  26.       echo $cfdiComprobante['tipoDeComprobante'];
  27.       echo "<br />";
  28. }
  29. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor') as $Emisor){
  30.    echo $Emisor['rfc'];
  31.    echo "<br />";
  32.    echo $Emisor['nombre'];
  33.    echo "<br />";
  34. }
  35. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:DomicilioFiscal') as $DomicilioFiscal){
  36.    echo $DomicilioFiscal['pais'];
  37.    echo "<br />";
  38.    echo $DomicilioFiscal['calle'];
  39.    echo "<br />";
  40.    echo $DomicilioFiscal['estado'];
  41.    echo "<br />";
  42.    echo $DomicilioFiscal['colonia'];
  43.    echo "<br />";
  44.    echo $DomicilioFiscal['municipio'];
  45.    echo "<br />";
  46.    echo $DomicilioFiscal['noExterior'];
  47.    echo "<br />";
  48.    echo $DomicilioFiscal['codigoPostal'];
  49.    echo "<br />";
  50. }
  51. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:ExpedidoEn') as $ExpedidoEn){
  52.    echo $ExpedidoEn['pais'];
  53.    echo "<br />";
  54.    echo $ExpedidoEn['calle'];
  55.    echo "<br />";
  56.    echo $ExpedidoEn['estado'];
  57.    echo "<br />";
  58.    echo $ExpedidoEn['colonia'];
  59.    echo "<br />";
  60.    echo $ExpedidoEn['noExterior'];
  61.    echo "<br />";
  62.    echo $ExpedidoEn['codigoPostal'];
  63.    echo "<br />";
  64. }
  65. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Receptor') as $Receptor){
  66.    echo $Receptor['rfc'];
  67.    echo "<br />";
  68.    echo $Receptor['nombre'];
  69.    echo "<br />";
  70. }
  71. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Receptor//cfdi:Domicilio') as $ReceptorDomicilio){
  72.    echo $ReceptorDomicilio['pais'];
  73.    echo "<br />";
  74.    echo $ReceptorDomicilio['calle'];
  75.    echo "<br />";
  76.    echo $ReceptorDomicilio['estado'];
  77.    echo "<br />";
  78.    echo $ReceptorDomicilio['colonia'];
  79.    echo "<br />";
  80.    echo $ReceptorDomicilio['municipio'];
  81.    echo "<br />";
  82.    echo $ReceptorDomicilio['noExterior'];
  83.    echo "<br />";
  84.    echo $ReceptorDomicilio['noInterior'];
  85.    echo "<br />";
  86.    echo $ReceptorDomicilio['codigoPostal'];
  87.    echo "<br />";
  88. }
  89. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Conceptos//cfdi:Concepto') as $Concepto){
  90.    echo "<br />";
  91.    echo $Concepto['unidad'];
  92.    echo "<br />";
  93.    echo $Concepto['importe'];
  94.    echo "<br />";
  95.    echo $Concepto['cantidad'];
  96.    echo "<br />";
  97.    echo $Concepto['descripcion'];
  98.    echo "<br />";
  99.    echo $Concepto['valorUnitario'];
  100.    echo "<br />";  
  101.    echo "<br />";
  102. }
  103. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Traslados//cfdi:Traslado') as $Traslado){
  104.    echo $Traslado['tasa'];
  105.    echo "<br />";
  106.    echo $Traslado['importe'];
  107.    echo "<br />";
  108.    echo $Traslado['impuesto'];
  109.    echo "<br />";  
  110.    echo "<br />";
  111. }
  112.  
  113. //ESTA ULTIMA PARTE ES LA QUE GENERABA EL ERROR
  114. foreach ($xml->xpath('//t:TimbreFiscalDigital') as $tfd) {
  115.    echo $tfd['selloCFD'];
  116.    echo "<br />";
  117.    echo $tfd['FechaTimbrado'];
  118.    echo "<br />";
  119.    echo $tfd['UUID'];
  120.    echo "<br />";
  121.    echo $tfd['noCertificadoSAT'];
  122.    echo "<br />";
  123.    echo $tfd['version'];
  124.    echo "<br />";
  125.    echo $tfd['selloSAT'];
  126. }
  127. ?>
  #6 (permalink)  
Antiguo 21/08/2012, 13:13
 
Fecha de Ingreso: agosto-2012
Mensajes: 1
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Muchas gracias por publicar el código funcionando. Me ha sido de gran utilidad!
  #7 (permalink)  
Antiguo 22/10/2012, 10:40
 
Fecha de Ingreso: octubre-2012
Mensajes: 1
Antigüedad: 12 años
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Hola, tengo un xml de esta manera : <?xml version="1.0" encoding="ISO-8859-1"?>
<tns:Tomo1 xmlns:tns="http://www.example.org/Tomo1Bopi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/Tomo1Bopi https://sede.oepm.gob.es/bopiweb/xsd/tomo1/Tomo1_v1.42.xsd">
<tns:Marcas>
<tns:SolicitudesMarcas>
<tns:SolicitudMarca>
<tns:PublicacionId>881716</tns:PublicacionId>
<tns:Modalidad>M</tns:Modalidad>
<tns:p21_NumSolicitud>3032565</tns:p21_NumSolicitud>
<tns:Bis> </tns:Bis>
<tns:DigitoControl>X</tns:DigitoControl>
<tns:ApellidosTitular>ENTE PUBLICO RADIO - TELEVISION DE CASTILLA - LA MANCHA</tns:ApellidosTitular>
<tns:FechaDepositoRegular>29/05/2012</tns:FechaDepositoRegular>
<tns:TipoSigno>D</tns:TipoSigno>
<tns:Domicilio>RIO ALBERCHE SN</tns:Domicilio>
<tns:CodigoPostal>45007</tns:CodigoPostal>
<tns:PaisDeResidencia>ES</tns:PaisDeResidencia>
<tns:Localidad>TOLEDO</tns:Localidad>
<tns:Provincia>TOLEDO</tns:Provincia>
<tns:Denominacion>DESCUBRIENDO NUESTRA TIERRA</tns:Denominacion>
<tns:ProductosServiciosActividades>38-EMISION Y DIFUSION DE PROGRAMAS DE TELEVISION Y RADIO; SERVICIOS DE RADIODIFUSION; TELEVISION POR CABLE; TRANSMISION VA SATELITE; COMUNICACIONES; SERVICIOS DE TELECOMUNICACIONES A TRAVES DE REDES MUNDIALES DE INFORMATICA. </tns:ProductosServiciosActividades>
<tns:ProductosServiciosActividades>41-PRODUCCION Y MONTAJE DE PROGRAMAS DE TELEVISION Y RADIOFONICOS; ORGANIZACION DE CONCURSOS, DIVERSIONES TELEVISIVAS Y RADIOFONICAS, ENTRETENIMIENTOS TELEVISADOS; ORGANIZACION, PRODUCCION Y REPRESENTACION DE ESPECTACULOS; PRODUCCION DE PELICULAS (FILMS). EDUCACION; FORMACION PRESENCIAL Y A DISTANCIA; ESPARCIMIENTO; ACTIVIDADES DEPORTIVAS Y CULTURALES; ORGANIZACION DE CONFERENCIAS Y SEMINARIOS. </tns:ProductosServiciosActividades>
<tns:ApellidosRepresentante>Lahidalga de Careaga</tns:ApellidosRepresentante>
<tns:NombreRepresentante>José Luis</tns:NombreRepresentante>
<tns:DomicilioRepresentante>C/ Arturo Soria,243 Dpl. Esc.4-1º Izq.</tns:DomicilioRepresentante>
<tns:CPRepresentante>28033</tns:CPRepresentante>
<tns:PaisRepresentante>ES</tns:PaisRepresentante>
<tns:LocalidadRepresentante>Madrid</tns:LocalidadRepresentante>
<tns:ProvinciaRepresentante>MADRID</tns:ProvinciaRepresentante>
<tns:imagen>/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBA=</tns:imagen>
</tns:SolicitudMarca>


</tns:SolicitudesMarcas>
</tns:Marcas>
</tns:Tomo1>


Y cuando lo recorro asi me sale en blanco los valores de los nodos que quiero ver. Alguna sugerencia?

$xml="tomo1.xml";
$sxe = simplexml_load_file($xml);
$ns = $sxe->getNamespaces(true);
$sxe->registerXPathNamespace('t', $ns['tns']);
//$sxe->registerXPathNamespace('t', $ns['tfd']);

foreach ($sxe->xpath('//t:Tomo1//t:Marcas//t:SolicitudesMarcas//t:SolicitudMarca') as $tfd) {
echo $tfd['PublicacionId']."<br />";
echo $tfd['Modalidad']."<br />";

}
  #8 (permalink)  
Antiguo 12/02/2013, 13:26
 
Fecha de Ingreso: febrero-2013
Mensajes: 1
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Excelente Ing Efrain... funciona perfecto..
Gracias por compartir.
Saludos.
  #9 (permalink)  
Antiguo 30/07/2013, 14:56
 
Fecha de Ingreso: enero-2010
Mensajes: 1
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Justamente estaba buscando esto, gracias por compartir el código final funcionado.
  #10 (permalink)  
Antiguo 11/12/2013, 20:26
 
Fecha de Ingreso: julio-2009
Mensajes: 1
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Muchisimas gracias brother!!!!! me sirvio mucho tu ejemplo....
  #11 (permalink)  
Antiguo 16/12/2013, 17:50
Avatar de admado  
Fecha de Ingreso: junio-2006
Ubicación: Morelos, México
Mensajes: 115
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Gracias por compartir!!
__________________
>>> El hombre se hace viejo muy pronto y sabio demasiado tarde <<<
  #12 (permalink)  
Antiguo 09/01/2014, 23:12
 
Fecha de Ingreso: enero-2014
Mensajes: 1
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

Gracias, ya me estaba volviendo loco!.
  #13 (permalink)  
Antiguo 05/03/2014, 15:22
Avatar de emilio_viguri  
Fecha de Ingreso: junio-2011
Ubicación: Mexico
Mensajes: 117
Antigüedad: 13 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML con SIMPLEXML

Hola que tal estoy intentando interpretar un XML aparir de tu codicio pero sin éxito.

Intento subir un archivo xml y que este a su vez me muestre la informacion del xml.

Código PHP:
Ver original
  1. <html>
  2. <body>
  3. <form action="validaxml.php" method='post' enctype='multipart/form-data'>
  4.  Archivo <input type='file' name='arch' size='60'>
  5.  <INPUT TYPE="submit" VALUE="Valida" >
  6.  <br><br><hr>
  7. </FORM>
  8. <?php
  9. if (trim($_FILES['arch']['name'])=="") die("No archivo");
  10. if ($_FILES['arch']['error']==1 || $_FILES['arch']['size']==0) {
  11.     echo "<h1><red>NO SUBIO archivo, demasiado grande</red></h1>";
  12.     die();
  13. }
  14. $arch = $_FILES['arch']['tmp_name'];
  15. $texto = file_get_contents($arch);
  16. unlink($arch);
  17.  
  18. #$xml = simplexml_load_file('test.xml');
  19. #$xml = simplexml_load_file($texto);
  20. #echo $xml = $texto;
  21.  
  22. $ns = $xml->getNamespaces(true);
  23. $xml->registerXPathNamespace('c', $ns['cfdi']);
  24. $xml->registerXPathNamespace('t', $ns['tfd']);
  25.  
  26.  
  27. //EMPIEZO A LEER LA INFORMACION DEL CFDI E IMPRIMIRLA
  28. foreach ($xml->xpath('//cfdi:Comprobante') as $cfdiComprobante){
  29.       echo $cfdiComprobante['version'];
  30.       echo "<br />";
  31.       echo $cfdiComprobante['fecha'];
  32.       echo "<br />";
  33.       echo $cfdiComprobante['sello'];
  34.       echo "<br />";
  35.       echo $cfdiComprobante['total'];
  36.       echo "<br />";
  37.       echo $cfdiComprobante['subTotal'];
  38.       echo "<br />";
  39.       echo $cfdiComprobante['certificado'];
  40.       echo "<br />";
  41.       echo $cfdiComprobante['formaDePago'];
  42.       echo "<br />";
  43.       echo $cfdiComprobante['noCertificado'];
  44.       echo "<br />";
  45.       echo $cfdiComprobante['tipoDeComprobante'];
  46.       echo "<br />";
  47. }
  48. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor') as $Emisor){
  49.    echo $Emisor['rfc'];
  50.    echo "<br />";
  51.    echo $Emisor['nombre'];
  52.    echo "<br />";
  53. }
  54. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:DomicilioFiscal') as $DomicilioFiscal){
  55.    echo $DomicilioFiscal['pais'];
  56.    echo "<br />";
  57.    echo $DomicilioFiscal['calle'];
  58.    echo "<br />";
  59.    echo $DomicilioFiscal['estado'];
  60.    echo "<br />";
  61.    echo $DomicilioFiscal['colonia'];
  62.    echo "<br />";
  63.    echo $DomicilioFiscal['municipio'];
  64.    echo "<br />";
  65.    echo $DomicilioFiscal['noExterior'];
  66.    echo "<br />";
  67.    echo $DomicilioFiscal['codigoPostal'];
  68.    echo "<br />";
  69. }
  70. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Emisor//cfdi:ExpedidoEn') as $ExpedidoEn){
  71.    echo $ExpedidoEn['pais'];
  72.    echo "<br />";
  73.    echo $ExpedidoEn['calle'];
  74.    echo "<br />";
  75.    echo $ExpedidoEn['estado'];
  76.    echo "<br />";
  77.    echo $ExpedidoEn['colonia'];
  78.    echo "<br />";
  79.    echo $ExpedidoEn['noExterior'];
  80.    echo "<br />";
  81.    echo $ExpedidoEn['codigoPostal'];
  82.    echo "<br />";
  83. }
  84. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Receptor') as $Receptor){
  85.    echo $Receptor['rfc'];
  86.    echo "<br />";
  87.    echo $Receptor['nombre'];
  88.    echo "<br />";
  89. }
  90. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Receptor//cfdi:Domicilio') as $ReceptorDomicilio){
  91.    echo $ReceptorDomicilio['pais'];
  92.    echo "<br />";
  93.    echo $ReceptorDomicilio['calle'];
  94.    echo "<br />";
  95.    echo $ReceptorDomicilio['estado'];
  96.    echo "<br />";
  97.    echo $ReceptorDomicilio['colonia'];
  98.    echo "<br />";
  99.    echo $ReceptorDomicilio['municipio'];
  100.    echo "<br />";
  101.    echo $ReceptorDomicilio['noExterior'];
  102.    echo "<br />";
  103.    echo $ReceptorDomicilio['noInterior'];
  104.    echo "<br />";
  105.    echo $ReceptorDomicilio['codigoPostal'];
  106.    echo "<br />";
  107. }
  108. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Conceptos//cfdi:Concepto') as $Concepto){
  109.    echo "<br />";
  110.    echo $Concepto['unidad'];
  111.    echo "<br />";
  112.    echo $Concepto['importe'];
  113.    echo "<br />";
  114.    echo $Concepto['cantidad'];
  115.    echo "<br />";
  116.    echo $Concepto['descripcion'];
  117.    echo "<br />";
  118.    echo $Concepto['valorUnitario'];
  119.    echo "<br />";  
  120.    echo "<br />";
  121. }
  122. foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Traslados//cfdi:Traslado') as $Traslado){
  123.    echo $Traslado['tasa'];
  124.    echo "<br />";
  125.    echo $Traslado['importe'];
  126.    echo "<br />";
  127.    echo $Traslado['impuesto'];
  128.    echo "<br />";  
  129.    echo "<br />";
  130. }
  131.  
  132. //ESTA ULTIMA PARTE ES LA QUE GENERABA EL ERROR
  133. foreach ($xml->xpath('//t:TimbreFiscalDigital') as $tfd) {
  134.    echo $tfd['selloCFD'];
  135.    echo "<br />";
  136.    echo $tfd['FechaTimbrado'];
  137.    echo "<br />";
  138.    echo $tfd['UUID'];
  139.    echo "<br />";
  140.    echo $tfd['noCertificadoSAT'];
  141.    echo "<br />";
  142.    echo $tfd['version'];
  143.    echo "<br />";
  144.    echo $tfd['selloSAT'];
  145. }
  146. ?>
  147. </body>
  148. </html>
  #14 (permalink)  
Antiguo 19/01/2015, 12:02
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba
Mensajes: 1
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Problemas al leer XML con SIMPLEXML

buen a porte me sirvió mucho

Etiquetas: blob+xml, cfdi, leer+archivoss+xml, mysql+xml, namespace, simplexml, simplexml_load_string, xml, xpath, xpath+xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 08:36.