Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Curioso caso con DOM

Estas en el tema de Curioso caso con DOM en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos, es mi primer post en este foro. Os cuento mi caso a ver si alguien encuentra una solución: Tengo un fichero XML con ...
  #1 (permalink)  
Antiguo 20/03/2010, 14:07
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Curioso caso con DOM

Hola amigos, es mi primer post en este foro.

Os cuento mi caso a ver si alguien encuentra una solución:

Tengo un fichero XML con infinifad de productos, cada uno con su nombre, descripcion, precio y demas campos. No todos los productos tienen todos los campos, y la extructura del xml no contiene todos los nodos hijos de cada producto, es decir, en vez de respetar la extructura y hacer todos los nodos "product" con los mismos nodos hijo lo que me han pasado es un xml con muchos nodos "product" pero no son iguales en su extructura, algunos carecen de algun nodo hijo.

Para mostralos correctamente he escrito este código:

Código PHP:
$productos $docxml->getElementsByTagName('product');
foreach(
$productos as $producto) {
    
$nodos $producto->childNodes;
    for(
$i=0;$i $nodos->length;$i++) {
        
$nombreNodo $nodos->item($i)->nodeName;
        
$valor $nodos->item($i)->nodeValue;
        switch(
$nombreNodo) {
        case 
"name":
            echo 
"<b>Nombre: </b>$valor<br>";
            break;
        case 
"description":
            echo 
"<b>Descripcion: </b>$valor<br>";
            break;
        default:
            echo 
"";
        }
    }

Lo curioso es que tal cual lo veis no funciona, solo funciona si en el bloque "default" pongo esto:
Código PHP:
...
default:
    echo 
"$nombreNodo<br>"
no le veo sentido, ¿alguna sugerencia? muchas gracias!!
  #2 (permalink)  
Antiguo 20/03/2010, 21:29
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Curioso caso con DOM

Estas usando la clase DomDocument?

Porque no probas haciendo un echo de tus variables aca:

(te reescribo todo un poco mas sencillo)

Código PHP:
$productos $docxml->getElementsByTagName('product');
foreach(
$productos as $producto) {
    
$nodos $producto->childNodes;

    
# Esto anda bien? No sera count($nodos) en vez de $nodos->length ?
    
for($i=0;$i $nodos->length;$i++) {
        
$nombreNodo $nodos->item($i)->nodeName;
        
$valor $nodos->item($i)->nodeValue;

        echo 
"El nombre del nodo: $nombreNodo <br />";
        echo 
"El valor: $valor";

    }

Y fijate que te va imprimiendo
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 22/03/2010, 16:12
 
Fecha de Ingreso: marzo-2010
Mensajes: 3
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Curioso caso con DOM

Hola, ¡gracias por contestar!

De esta forma tambien funciona, pero lo raro es que lo abre en una página en blanco en vez de en el frame donde deberia.

He estado haciendo pruebas y me temo que tiene que ver con el xml y su "fallo" de extructura. He probado con otro xml que si que respeta la misma extructura en todos los nodos y funciona perfectamente.

Tambien es cierto que el xml que falla es bastante grande, unos 9 MB. ¿es posible que quizas falte memoria para procesar el xml de 9MB?

saludos
  #4 (permalink)  
Antiguo 24/03/2010, 20:09
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Curioso caso con DOM

No creo que tenga que ver con el tamaño... Fijate de acomodarlo lo mejor posible, seguro es eso...

Un saludo!
__________________
HV Studio
Diseño y desarrollo web

Etiquetas: dom
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 00:09.