PHP - Recorrer XML mediante PHP

 
Vista:

Recorrer XML mediante PHP

Publicado por Marvin ELiosa (2 intervenciones) el 03/08/2018 21:48:33
¿Cómo recorro este XML con PHP?
Buen día, intento recorrer un archivo XML con PHP mediante la función simplexml_load_file( archivo.xml );
El problema se encuentra en que en internet encuentro muchos XML de este tipo:
1
2
3
4
5
6
7
8
9
10
11
12
13
<rss>
<alumnos>
    <alumno fechadenac="30/09/1992">
        <nombre>Juan</nombre>
    </alumno>
    <alumno fechadenac="30/09/1992">
        <nombre>Jorge</nombre>
    </alumno>
    <alumno fechadenac="30/09/1992">
        <nombre>Josue</nombre>
    </alumno>
</alumnos>
</rss>
Ejemplo: URL: https://web.tursos.com/como-leer-un-archivo-xml-con-php/

PERO!! Cuando intento recorrer el siguiente XML que es el que yo tengo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante xsi:schemaLocation="www.algo.com" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="3.3" Serie="GC" Folio="0060280966" Fecha="2018-06-27T08:22:51" Sello="Sello" SubTotal="327.63" Descuento="95.73" Moneda="MXN" Total="269.00" TipoDeComprobante="I" MetodoPago="PPD" LugarExpedicion="10000" xmlns:terceros="www.algo.com">
<cfdi:Emisor Rfc="RDI841003QJ4" Nombre="Radiomóvil Dipsa, S.A. de C.V." RegimenFiscal="623"/>
<cfdi:Receptor Rfc="ALGUNRFC" Nombre="Nombre del Receptor" UsoCFDI="P01"/>
<cfdi:Conceptos>
<cfdi:Concepto ClaveProdServ="83111603" Cantidad="1" ClaveUnidad="E48" Unidad="Unidad de Servicio" Descripcion="Servicios de Concepto" ValorUnitario="231.90" Importe="231.90">
<cfdi:Impuestos>
<cfdi:Traslados>
<cfdi:Traslado Base="231.90" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="37.10"/>
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Concepto>
<cfdi:Concepto ClaveProdServ="43191501" Cantidad="1" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Cargo de equipo 6 de 18" ValorUnitario="95.73" Importe="95.73" Descuento="95.73"/>
</cfdi:Conceptos>
<cfdi:Impuestos TotalImpuestosTrasladados="37.10">
<cfdi:Traslados>
<cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="37.10"/>
</cfdi:Traslados>
</cfdi:Impuestos>
<cfdi:Complemento>
<tfd:TimbreFiscalDigital xsi:schemaLocation="www.algo.com" xmlns:tfd="www.algo.com" Version="1.1" UUID="3AD3AE25-3446-ALGO-BE45-E370E8B6CBB7" FechaTimbrado="2018-06-28T17:08:39" RfcProvCertif="CEC961028A98" SelloCFD="SelloCFD" NoCertificadoSAT="00001000000407058485" SelloSAT="SelloSAT"/>
</cfdi:Complemento>
</cfdi:Comprobante>

Solo me toma la primera etiqueta que es <cfdi:Comprobante...
<cfdi:Comprobante xsi:schemaLocation="www.algo.com" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="3.3" Serie="GC" Folio="0060280966" Fecha="2018-06-27T08:22:51" Sello="Sello" SubTotal="327.63" Descuento="95.73" Moneda="MXN" Total="269.00" TipoDeComprobante="I" MetodoPago="PPD" LugarExpedicion="10000" xmlns:terceros="www.algo.com">


¿Cómo accedo a las demás etiquetas y sus propiedades(SubTotal, Moneda, RFC, etc)?
De antemano muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 85
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML mediante PHP

Publicado por Cesar (29 intervenciones) el 03/08/2018 22:01:26
Hola.

Eso es un CFDI (una factura electronica de México).

En PHP desconozco como leerlo.

Pero en C#, simplemente creas la clase, convirtiendola del XSD que publica el mismo SAT, serializas el XML a dicha clase, y listo, se lee el XML como propiedades de la clase.

Tendrias que hacer algo similar en PHP (con alguna herramienta como XSD, crear la clase, y serializarla).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Recorrer XML mediante PHP

Publicado por marvineliosa (2 intervenciones) el 10/08/2018 17:09:01
Voy a investigar al respecto, me ayudaste mucho!! te lo agradezco!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Recorrer XML mediante PHP

Publicado por Mauro (1063 intervenciones) el 15/08/2018 19:12:18
No tengo experiencia específica en CFDI (No vivo en México), pero lo que veo de diferente entre el primer XML que nombras y el segundo es que el primero corresponde a un feed RSS.

Más aún, el segundo (El CFDI) utiliza namespaces (cfdi:) y el primero no...

Para que tome bien los datos usa algo como:

1
$xml = simplexml_load_file( 'cfdi.xml', 'SimpleXMLElement', 0, 'cfdi', true );

Código entero:

1
2
3
4
5
6
7
8
9
<?php
 
$xml = simplexml_load_file( 'cfdi.xml', 'SimpleXMLElement', 0, 'cfdi', true );
 
print_r($xml);
 
echo PHP_EOL;
 
echo print_r( $xml->attributes, 1 ).PHP_EOL;

(El archivo cfdi.xml contiene el xml que publicaste)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar