PHP - Leer XML

 
Vista:

Leer XML

Publicado por Jorge (1 intervención) el 21/05/2024 18:11:31
Hola!! no logro leer todos los datos de un XML...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$z = new XMLReader;
$z->open('xxxxxxxfile.xml');
$doc = new DOMDocument;
 
 
while ($z->read() && $z->name !== 'item');
 
 
while ($z->name === 'item')
{
	$row = simplexml_import_dom($doc->importNode($z->expand(), true));
 
    echo $row->title."<br>";
    $z->next('item'); }

Quiero obtener estos datos del xml:

<title><![CDATA[Sandisk Ultra 32Gb Usb 3.0 Negro Unidad Flash Usb]]></title>
<g:gtin>0619659102166</g:gtin>

<title> lo obtengo sin problema pero no se como hacer para obtener <g:gtin>

1
echo $row->g:gtin."<br>";
da error de sintaxis...

alguien que pueda ayudarme? Gracias de antemano.
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
Imágen de perfil de Ivan

Leer XML

Publicado por Ivan (119 intervenciones) el 22/05/2024 10:05:02
Hola!

El problema que tienes es debido a que simplexml no maneja bien los nombres de elementos que contienen dos puntos, como <g:gtin>. En XML, los dos puntos se usan para separar el espacio de nombres del nombre del elemento. Para acceder a estos elementos, necesitas manejar los espacios de nombres correctamente.

Aquí tienes una manera de hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$z = new XMLReader;
$z->open('xxxxxxxfile.xml');
$doc = new DOMDocument;
 
while ($z->read() && $z->name !== 'item');
 
while ($z->name === 'item')
{
    $node = $z->expand();
    $importedNode = $doc->importNode($node, true);
    $row = simplexml_import_dom($importedNode);
 
    // Registrar el espacio de nombres con un prefijo
    $namespaces = $row->getNamespaces(true);
    $gNamespace = $namespaces['g'];
 
    // Acceder al elemento <title>
    echo $row->title . "<br>";
 
    // Acceder al elemento <g:gtin> usando el espacio de nombres registrado
    echo $row->children($gNamespace)->gtin . "<br>";
 
    $z->next('item');
}

También te puede interesar este artículo:

Leer un RSS o feed con PHP

Un saludo!
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

Leer XML

Publicado por Jorge (1 intervención) el 26/05/2024 16:19:05
Muchas gracias!
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