Página 1 de 1

Leer ultimo nodo de tfd:TimbreFiscalDigital

Publicado: Mar Feb 21, 2012 1:28 pm
por ing_rod25
Hola buen dia
estoy trabajando en como leer el contenido de un XML en PHP
he utilizado el codigo encontrado en este post
http://www.validacfd.com/phpbb3/viewtopic.php?f=9&t=324
para leer la informacion contenida en el XML del CFDI
toda la informacion es leida corerctamente
solo que al acceder al ultimo nodo el que contiene la informacion del timbre fiscal digital
em 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: Seleccionar todo

<?
$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 />";
}
//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 en este lenguaje y con esta funcion y me diga que estoy implementando mal.