Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿Cómo imprimir únicamente una etiqueta específica XML?

Estas en el tema de ¿Cómo imprimir únicamente una etiqueta específica XML? en el foro de PHP en Foros del Web. Hola amigos; En México hubo cambios con la facturación electrónica (versión 3.3) y yo tengo un sistema en PHP que me lee los XML y ...
  #1 (permalink)  
Antiguo 25/01/2018, 04:29
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 15 años, 6 meses
Puntos: 3
Pregunta ¿Cómo imprimir únicamente una etiqueta específica XML?

Hola amigos;

En México hubo cambios con la facturación electrónica (versión 3.3) y yo tengo un sistema en PHP que me lee los XML y me los envía a EXCEL.

Pero, con la versión 3.3 ya no me sirve, y necesito un poco de ayuda, pues intento imprimir solo la etiqueta final que contiene la leyenda: "TotalImpuestosTrasladados"

El XML (parte de él) es:

Código:
<cfdi:Conceptos><cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="000004000021478" Cantidad="1" ClaveUnidad="H87" Unidad="PIEZAS" Descripcion="REB CHESSECA" ValorUnitario="22.04" Importe="22.04" Descuento="0.49">

<cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="21.5554" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="3.4489" /></cfdi:Traslados></cfdi:Impuestos>
 
 
</cfdi:Concepto>

<cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="000000000017248" Cantidad="1" ClaveUnidad="H87" Unidad="PIEZAS" Descripcion="CHURROS AZUC" ValorUnitario="17.64" Importe="17.64" Descuento="0.39">

<cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="17.2477" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="2.7596" /></cfdi:Traslados></cfdi:Impuestos>
 
 </cfdi:Concepto>

<cfdi:Concepto ClaveProdServ="01010101" NoIdentificacion="000000000031007" Cantidad="1" ClaveUnidad="H87" Unidad="PIEZAS" Descripcion="CONO" ValorUnitario="10.58" Importe="10.58" Descuento="0.23">

<cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="10.3435" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="1.6550" /></cfdi:Traslados></cfdi:Impuestos>
 
 </cfdi:Concepto></cfdi:Conceptos>
 
 <cfdi:Impuestos TotalImpuestosTrasladados="7.86">
 <cfdi:Traslados><cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="7.863448" /></cfdi:Traslados></cfdi:Impuestos>
Como verán, al final una vez que cierran las etiquetas de conceptos están los impuestos totales que me interesan, y quiero solo obtener el valor de dichas etiquetas (Impuesto = 002, TipoFactor = Tasa, TasaOCuota = 0.160000, Importe = 7.863448)


Actualmente los leo así:

Código PHP:
foreach ($xml->xpath('//cfdi:Comprobante//cfdi:Impuestos//cfdi:Traslados//cfdi:Traslado') as $Traslado){
   echo 
$Traslado['TipoFactor']; 
   echo 
"<br />"
   echo 
$Traslado['TasaOCuota']; 
   echo 
"<br />"
   echo 
$Traslado['Importe']; 
   echo 
"<br />"
   echo 
$Traslado['Impuesto']; 
   echo 
"<br />";   
   echo 
"<br />"

Pero, a pesar de que NO ESTOY INCLUYENDO la etiqueta CONCEPTOS me arroja los resultados de los demás...

asi:

Cita:
Tasa
0.160000
3.4489
002

Tasa
0.160000
2.7596
002

Tasa
0.160000
1.6550
002

Tasa
0.160000
7.863448
002
Y básicamente ocupo solo el último no los demás...

¿Alguien me podría orientar por favor ?
  #2 (permalink)  
Antiguo 25/01/2018, 07:33
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 17 años, 11 meses
Puntos: 50
Respuesta: ¿Cómo imprimir únicamente una etiqueta específica XML?

dfmex..


Tendria que ver bien al estrucutra del contenido para poder darle una solucion ideal... pero viendo lo que colocó, lo que se me ocurre es que coloque dentro del for un condicional donde valide si el nodo impestos tiene el atributo totalImpuestosTraslados

count(//*[@foo])


Me cuetna saludos
  #3 (permalink)  
Antiguo 25/01/2018, 12:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: ¿Cómo imprimir únicamente una etiqueta específica XML?

La doble diagonal // es un comodín, por eso es que se buscan todas las coincidencias, en todos los casos deja solo una.

Código PHP:
Ver original
  1. foreach ($xml->xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado') as $Traslado){
  2.    echo $Traslado['TipoFactor'];
  3.    echo "<br />";
  4.    echo $Traslado['TasaOCuota'];
  5.    echo "<br />";
  6.    echo $Traslado['Importe'];
  7.    echo "<br />";
  8.    echo $Traslado['Impuesto'];
  9.    echo "<br />";  
  10.    echo "<br />";
  11. }
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 27/01/2018, 02:36
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 15 años, 6 meses
Puntos: 3
Respuesta: ¿Cómo imprimir únicamente una etiqueta específica XML?

Cita:
Iniciado por Triby Ver Mensaje
La doble diagonal // es un comodín, por eso es que se buscan todas las coincidencias, en todos los casos deja solo una.

Código PHP:
Ver original
  1. foreach ($xml->xpath('/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado') as $Traslado){
  2.    echo $Traslado['TipoFactor'];
  3.    echo "<br />";
  4.    echo $Traslado['TasaOCuota'];
  5.    echo "<br />";
  6.    echo $Traslado['Importe'];
  7.    echo "<br />";
  8.    echo $Traslado['Impuesto'];
  9.    echo "<br />";  
  10.    echo "<br />";
  11. }
Gracias, ciertamente quitando las doble diagonal funcionó como esperaba.

Etiquetas: etiqueta
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:02.