• Publicidad

Recursividad arrays

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Recursividad arrays

Notapor _snake_ » 2011-05-04 05:35 @274

Buenas,

tengo un problema en una función recursiva, concretamente en el uso de un array. El error que me da el navegador, es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't use an undefined value as an ARRAY reference at parseXML.cgi line 1817.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


La función recorre una estructura $SubPart que puede tener a su vez $SubPart.

El array $posNiveles lo empleo para saber en qué nivel de profundidad estoy. Ejemplo: $posNiveles[3,4,1] significaría: "estoy en el elemento 3 del primer nivel, en el elemento 4 del segundo nivel y en el elemento 1 del tercer nivel".

Cada vez que encuentro que un elemento tiene hijos, entonces hago un push (@posicionesNiveles,1). Si un elemento tiene hermanos entonces hago un ++@posicionesNiveles[$posActual] antes de dibujar el hermano. Cuando acabo de gestionar los hijos de un elemento utilizo pop(@posicionesNiveles)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub mostrarSubPart
  2. {
  3.         my ($self, $SubPart, $posNiveles) = @_;
  4.         #print $posNiveles;
  5.         #return;
  6.         my @posNiveles = @$posNiveles;
  7.  
  8.         # muestro la informacion de esta $SubPart empleando print
  9.        
  10.         # he encontrado que $SubPart tiene SubPartes, entonces llamo a esta misma funcion
  11.         # $SubPartNueva es el hijo del actual SubPart
  12.         mostrarSubPart($self, $SubPartNueva, \@posNiveles);
  13.  
  14.         # una vez que termino toda la recursividad hago un return
  15.         return;
  16. }
  17.  
  18. # llamada a la función en el código principal
  19. mostrarSubPart($self, $SubPart, \@posicionesNiveles);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Espero que puedan ayudarme.

Muchas gracias.
_snake_
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-05-04 05:17 @261

Publicidad

Re: Recursividad arrays

Notapor explorer » 2011-05-04 06:43 @321

Bienvenido a los foros de Perl en español, _snake_.

Me falta información para dar una respuesta correcta, pero lo intentaré.

El error se refiere a que ParseXML se ha encontrado con un nulo, en lugar de una referencia a un array, así que eso puede indicar que estás llamando a ParseXML más allá de la estructura XML que tenías almacenada.

Sobre el tema de la recursividad... en teoría no te haría falta llevar un control del nivel de profundidad, porque de eso se encargaría la propia pila de llamadas de la subrutina.

Es decir, si dentro de la subrutina te ocupas de procesar a todos los nodos hijo, dado un nodo, y luego regresar, entonces no necesitarías llevar ningún control del nivel de profundidad.

Ahora bien... sí que necesitarías llevar ese control si fuera para reflejar la profundidad en otra estructura que se gestiona fuera de la subrutina.

No sé si te he aclarado algo, o lo he empeorado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Recursividad arrays

Notapor _snake_ » 2011-05-07 10:31 @480

¡Muchas gracias explorer!

Necesito la profundidad para mostrar u ocultar elementos del XML con JavaScript. Tenías razón, estaba usando la recursividad más allá de la estructura XML. Ahora ya consigo mostrarlo en HTML.

Mi pregunta es: ¿Se puede mostrar el XML con XSL teniendo recursividad dentro del XML?

Muchas gracias.
_snake_
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-05-04 05:17 @261

Re: Recursividad arrays

Notapor explorer » 2011-05-07 13:15 @593

Pues... no lo sé...

A ver si alguien más del foro lo sabe...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Recursividad arrays

Notapor _snake_ » 2011-06-25 09:26 @435

La verdad es que sí que se puede, creando una template en XSL que sea recursiva.

El siguiente pasó será generar un documento XML a partir de otro XML. Parece que con XQuery se puede hacer. Ya os contaré.
_snake_
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2011-05-04 05:17 @261


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron