Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Leer XML Namespace con PHP

Estas en el tema de Leer XML Namespace con PHP en el foro de PHP en Foros del Web. Hola, espero estar en la sección correcta, he tratado ya de muchas formas de poder leer un xml, en especifico una línea que necesito obtener, ...
  #1 (permalink)  
Antiguo 11/07/2013, 09:48
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Leer XML Namespace con PHP

Hola, espero estar en la sección correcta, he tratado ya de muchas formas de poder leer un xml, en especifico una línea que necesito obtener, pero para esto, el xml tiene muchos namespace y etiquetas, y no sé realmente como llegar hasta la etiqueta que necesito, espero me puedan ayudar, gracias.
La información que necesito es la que tiene UUID

Código XML:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <cfdi:Comprobante xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales"
  3. xmlns:donat="http://www.sat.gob.mx/donat"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:divisas="http://www.sat.gob.mx/divisas"
  6. xmlns:implocal="http://www.sat.gob.mx/implocal" version="3.2"
  7. folio="20" fecha="2013-07-10T15:39:05" sello="KGM5ktbFpKPdX+IGUmPeqP0r6EcFENqU6KazIMiTVCVugaDsmxkxLL4h
  8. 5uPWc19fw6E8eCKAvJGX8FiQBTBni4MIBVjiwTnBVWeYUGpc0NQ+
  9. udEl3ca0Mh7j5i3LEgPsoEffmd8zyqdH1/UFIFF18r1FB+PE8YzUIOxOJ3Wmh9E="
  10. formaDePago="Pago en una sola exhibición"
  11. noCertificado="20001000000100005867"
  12. certificado="MIIEdDCCA1ygAwIBAgIUMjAwMDEwMDAwMDAxMDAwMDU
  13. 4NjcwDQYJKoZIhvcNAQEFBQAwggFvMRgwFgYDVQQDDA9BLkMuIGRlIHB
  14. ydWViYXMxLzAtBgNVBAoMJlNlcnZpY2lvIGRlIEFkbWluaXN0cmFjacOzbiBU
  15. cmlidXRhcmlhMTgwNgYDVQQLDC9BZG1pbmlzdHJhY2nDs24gZGUgU2Vn
  16. dXJpZGFkIGRlIGxhIEluZm9ybWFjacOzbjEpMCcGCSqGSIb3DQEJARYaYXN
  17. pc25ldEBwcnVlYmFzLnNhdC5nb2IubXgxJjAkBgNVBAkMHUF2LiBIaWRhbG
  18. dvIDc3LCBDb2wuIEd1ZXJyZXJvMQ4wDAYDVQQRDAUwNjMwMDELMAkGA
  19. 1UEBhMCTVgxGTAXBgNVBAgMEERpc3RyaXRvIEZlZGVyYWwxEjAQBgNVBA
  20. cMCUNveW9hY8OhbjEVMBMGA1UELRMMU0FUOTcwNzAxTk4zMTIwMAYJK
  21. oZIhvcNAQkCDCNSZXNwb25zYWJsZTogSMOpY3RvciBPcm5lbGFzIEFyY2ln
  22. YTAeFw0xMjA3MjcxNzAyMDBaFw0xNjA3MjcxNzAyMDBaMIHbMSkwJwYDV
  23. QQDEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA
  24. 1UEKRMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxKTAnB
  25. gNVBAoTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSUwIwYD
  26. VQQtExxBQUEwMTAxMDFBQUEgLyBIRUdUNzYxMDAzNFMyMR4wHAYDVQQ
  27. FExUgLyBIRUdUNzYxMDAzTURGUk5OMDkxETAPBgNVBAsTCFVuaWRhZCA
  28. xMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2TTQSPONBOVxpXv9
  29. wLYo8jezBrb34i/tLx8jGdtyy27BcesOav2c1NS/Gdv10u9SkWtwdy34uRAVe
  30. 7H0a3VMRLHAkvp2qMCHaZc4T8k47Jtb9wrOEh/XFS8LgT4y5OQYo6civfXX
  31. dlvxWU/gdM/e6I2lg6FGorP8H4GPAJ/qCNwIDAQABox0wGzAMBgNVHRMBA
  32. f8EAjAAMAsGA1UdDwQEAwIGwDANBgkqhkiG9w0BAQUFAAOCAQEATxMec
  33. TpMbdhSHo6KVUg4QVF4Op2IBhiMaOrtrXBdJgzGotUFcJgdBCMjtTZXSlq1S4
  34. DG1jr8p4NzQlzxsdTxaB8nSKJ4KEMgIT7E62xRUj15jI49qFz7f2uMttZLNThip
  35. unsN/NF1XtvESMTDwQFvas/Ugig6qwEfSZc0MDxMpKLEkEePmQwtZD+zXF
  36. SMVa6hmOu4M+FzGiRXbj4YJXn9Myjd8xbL/c+9UIcrYoZskxDvMxc6/6M3rNN
  37. DY3OFhBK+V/sPMzWWGt8S1yjmtPfXgFs1t65AZ2hcTwTAuHrKwDatJ1ZPfa
  38. 482ZBROAAX1waz7WwXp0gso7sDCm2/yUVww=="
  39. subTotal="1100.00"
  40. Moneda="MN"
  41. total="1100.00"
  42. tipoDeComprobante="ingreso"
  43. metodoDePago="Efectivo"
  44. LugarExpedicion="Cuernavaca, Morelos"
  45. xsi:schemaLocation="http://www.sat.gob.mx/cfd/3
  46. http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd
  47. http://www.sat.gob.mx/donat http://www.sat.gob.mx/sitio_internet/cfd/donat/donat11.xsd
  48. http://www.sat.gob.mx/divisas http://www.sat.gob.mx/sitio_internet/cfd/divisas/Divisas.xsd
  49. http://www.sat.gob.mx/leyendasFiscales
  50. http://www.sat.gob.mx/sitio_internet/cfd/leyendasFiscales/leyendasFisc.xsd
  51. http://www.sat.gob.mx/implocal
  52. http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd"
  53.  
  54. xmlns:cfdi="http://www.sat.gob.mx/cfd/3">
  55. <cfdi:Emisor rfc="DEMO161616FI1"
  56. nombre="Razon Social Demo Luis">
  57. <cfdi:DomicilioFiscal calle="calle demo" noExterior="1"
  58. colonia="colonia demo" municipio="Puebla" estado="PUEBLA" pais="MEXICO" codigoPostal="72400" />
  59. <cfdi:RegimenFiscal Regimen="Regimen General de las Personas Fisicas" />
  60.  
  61. <cfdi:RegimenFiscal Regimen="Regimen Intermedio" /></cfdi:Emisor>
  62.  
  63. <cfdi:Receptor rfc="XAXX010101000" nombre="Cerotec Studios">
  64. <cfdi:Domicilio calle="armando rivas 3" noExterior="20" referencia="Cerca del IMSS" municipio="Temixco"
  65. estado="MORELOS" pais="MEXICO" codigoPostal="0" /></cfdi:Receptor><cfdi:Conceptos>
  66. <cfdi:Concepto cantidad="1.00"
  67. unidad="NO APLICA" descripcion="Afiliación" valorUnitario="1000.00"
  68. importe="1000.00" />
  69. <cfdi:Concepto cantidad="1.00"
  70. unidad="NO APLICA"
  71. descripcion="SIEM"
  72. valorUnitario="100.00" importe="100.00" />
  73. </cfdi:Conceptos>
  74. <cfdi:Impuestos totalImpuestosRetenidos="0.00"
  75. totalImpuestosTrasladados="16.00">
  76. <cfdi:Traslados><cfdi:Traslado impuesto="IVA"
  77. tasa="16.00" importe="16.00" /></cfdi:Traslados>
  78. </cfdi:Impuestos>
  79. <cfdi:Complemento>
  80. <donat:Donatarias version="1.1" noAutorizacion="1254D-569" fechaAutorizacion="2013-05-09"
  81. leyenda="Recibo de Donatarios" /><divisas:Divisas version="1.0" tipoOperacion="venta" />
  82. <leyendasFisc:LeyendasFiscales version="1.0">
  83. <leyendasFisc:Leyenda disposicionFiscal="Resolucion Fiscal 2013"
  84. norma="10" textoLeyenda="Efectos Fiscales al Pago" /></leyendasFisc:LeyendasFiscales>
  85. <implocal:ImpuestosLocales version="1.0"
  86. TotaldeRetenciones="0.00"
  87. TotaldeTraslados="16.00" />
  88. <tfd:TimbreFiscalDigital
  89. xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital"
  90. xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital
  91. http://www.sat.gob.mx/sitio_internet/TimbreFiscalDigital/TimbreFiscalDigital.xsd"
  92. version="1.0"
  93.  
  94. UUID="B8E5071E-7E57-7E57-7E57-D914F09A7BA1"
  95. FechaTimbrado="2013-07-10T15:39:06"
  96.  
  97. selloCFD="KGM5ktbFpKPdX+IGUmPeqP0r6EcFENqU6KazIMiTVCVugaDsmxkxLL4h5uPWc19fw6E8eCKAvJGX8FiQBTBni4MIBVjiwTnBVWeYUGpc0NQ+udEl3ca0Mh7j5i3LEgPsoEffmd8zyqdH1/UFIFF18r1FB+PE8YzUIOxOJ3Wmh9E="
  98. noCertificadoSAT="00000000000001000"
  99. selloSAT="W96qWA9SQg4Gc4VYzQLdvMD91fwuyywjuTN2iL1VphqRexGKvAk5/mvaFQjg5XyKmQh8sulwH4yPNPCxDSV1CbfCN5/Wk1kjacWrAi1uQdYd6RfC5lJsNGGfDE6oVZDlGuZhqENi0nbCE5k+RzrVV4qfG3HUiNU7u4NyH/mHW4Q=" />
  100. </cfdi:Complemento></cfdi:Comprobante>
  #2 (permalink)  
Antiguo 11/07/2013, 12:26
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Leer XML Namespace con PHP

Seria mas sencillo orientarte si agregaras el codigo que estas usando en tus intentos.
De momento la documentación y un articulo te puede ayudar.
http://phpmaster.com/parsing-xml-with-simplexml/

http://www.php.net/manual/en/book.simplexml.php
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 11/07/2013, 13:02
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Leer XML Namespace con PHP

Hola, gracias por contestar, he estado intentandolo de varias formas, de hecho el xml que puse ante, lo derivo de otro más grande, aquí pongo el código:
Código PHP:
<?php
//OBTENER UUID

$folio="0000245";
 
$doc2 = new DOMDocument();
  
$doc2->load"../facturacion/soap-response".$folio."f.xml");
  
  
$books2 $doc2->getElementsByTagName"GenerarCFDIv32Result" );
  foreach( 
$books2 as $book2 ){
  
$authors2 $book2->getElementsByTagName"XML" );
  
$uuid $authors2->item(0)->nodeValue;
  
  
  }
  echo 
"uuid: ".$uuid;
 
/*Aqui trato de extraer el UUID pero no tengo ni idea de como hacerlo, ya que no es una etiqueta en si <UUID> de hecho solo está representado así UUID="" no creo que pueda obtenerlo de esta manera*/ 
 
$doc = new DOMDocument();
 
$doc->loadXML($uuid);
 
//tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital"
 
 
$Comprobantes=$doc->getElementsByTagName"cfdi:Comprobante" );
 foreach( 
$Comprobantes as $Comprobante ){
  
$UUID_ $Comprobante->getElementsByTagName"cfdi:Complemento" );
  foreach(
$UUID_ as $id){
      
$ides=$id->getElementsByTagName("tfd:TimbreFiscalDigital");
      foreach(
$ides as $i){
          
$a=$i->getElementsByTagName("UUID");
      }
  }
//  echo $UUID_;
  //$UUID_FINAL = $UUID_->item(0)->nodeValue;
 
 
 
}
 
 echo 
"UUID: ".$a;?>
  #4 (permalink)  
Antiguo 12/07/2013, 12:26
 
Fecha de Ingreso: octubre-2012
Mensajes: 28
Antigüedad: 11 años, 6 meses
Puntos: 2
Respuesta: Leer XML Namespace con PHP

Hola, buen día, pues ya pude solucionar mi problema, posteo la solución por si alguien más tiene este problema:

Código PHP:
<?php
$folio
="0000245";
 
$doc = new DOMDocument();
  
$doc->load"../facturacion/soap-response".$folio."f.xml");
  
$xml $doc->getElementsByTagName"XML" );

  
$result $xml->item(0)->nodeValue;
  
$dom = new DOMDocument;

// load the XML string defined above
$dom->loadXML($result);

foreach (
$dom->getElementsByTagNameNS('http://www.sat.gob.mx/TimbreFiscalDigital''*') as $element) {
    echo 
'local name: '$element->localName', prefix: '$element->prefix"\n";
    echo 
'UUID: '$element->getAttribute('UUID');
}
?>
Explico:
1. primero obtengo de un xml más grande, los datos que están dentro de una etiqueta XML (xml posteado al inicio)
2. Despué con $dom->loadXML($result); cargo todo ese xml encontrado entres las etiquetas XML
3. Con getElementsByTagNameNS y foreach busco en todo el documento los elementos del Namespace asociado con la dirección que le pertenece (http://www.sat.gob.mx/TimbreFiscalDigital)
4. Para fines de prueba imprimo su nombre local usando $element->localName y el prefijo que usa con $element->prefix
5. Por último obtengo el valor del atributo echo 'UUID: ', $element->getAttribute('UUID'); a partir de los elementos del Namespace que elegí

Espero sea de ayuda para alguien más.

Etiquetas: namespace, 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




La zona horaria es GMT -6. Ahora son las 09:48.