Foros del Web » Programación para mayores de 30 ;) » Programación General »

Pregunta acerca del titulo

Estas en el tema de Pregunta acerca del titulo en el foro de Programación General en Foros del Web. Esta debe ser muy facil, pero como soy demasaido novato , no me ha dejado dormir. Supongamos que tenemos este xsl Código: <table > <tr> ...
  #1 (permalink)  
Antiguo 11/10/2004, 17:23
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 3 meses
Puntos: 16
Pregunta acerca del titulo

Esta debe ser muy facil, pero como soy demasaido novato , no me ha dejado dormir.

Supongamos que tenemos este xsl

Código:
<table >
   <tr>
      <td>subcanales de <xsl:value-of select="id_class" /></td>
    </tr>

	 <xsl:for-each select="raiz/canal_publicaciones/reg">
	 <xsl:if test="id_class_father = //canal_publicacion_actual">
 
      <tr>
       <td class="celda_imagen_info_subcanales">
	<img src="{imagen_listado_canal_publicaciones}" />
      </td>
      
      <td>
      
        <p>
	<xsl:value-of select="glosa_canal_publicaciones" />
	</p>
       
      
      </td>
    </tr>
   

</xsl:if>

 </xsl:for-each> 
  
  </table>
con este xml

Código:
<raiz>
	<principal>
		<canal_publicacion_actual>1</canal_publicacion_actual>
	</principal>
	<canal_publicaciones>
		<reg>
			<id_class>1</id_class>
			<id_class_father></id_class_father>
			<glosa_canal_publicaciones>texto aqui</glosa_canal_publicaciones>
			<imagen_listado_canal_publicaciones>listado.gif</imagen_listado_canal_publicaciones>
		</reg>
		<reg>
			<id_class>2</id_class>
			<id_class_father>1</id_class_father>
			<glosa_canal_publicaciones>texto aca.</glosa_canal_publicaciones>
			<imagen_listado_canal_publicaciones>diario.gif</imagen_listado_canal_publicaciones>
		</reg>
		
	</canal_publicaciones>
</raiz>

Que muestra algo asi como los sub canales o sub secciones del canal o seccion actual.

osea mostraria
algo asi como


subcanales de 1 :
imagen de 2 - texto de 2

verdaD?

bueno. mi pregunta es . como puedo hacer que cuando el canal actual no tenga sub canales, no me muetre el titulo "subcanales de 1" ???

he probado de varias maneras, pero niuna me funciona.

alguna buena idea por alli ???
  #2 (permalink)  
Antiguo 12/10/2004, 07:59
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 3 meses
Puntos: 16
me explicare mejor

tengo un xml donde tengo una jerarquia de secciones de un sitio.

por ejemplo:

1
1,1
1,2
1,3
2
2,1
2,3
3
4
4,1
4,2


etc

Y estoy mostrando en una determinada parte los hijos de la seccion en la que me encuentrio actualmente.

por ejemplo si estoy en la seccion 4 , muestro en una tablita los hijos de 4.

asi


Hijos de 4
hijo uno
hijo dos

ahora mi problema es como hago, para que cuando el padre no tiene nimgun hijo, como es el caso de la seccion 3, no mostrar siquiera el titulo de la tablita.


el xsl:if test="count(hijo)>0 no me sirve ya que la definicion de los padres e hijos se hace asi en el xml

<reg>
<id>1</id>
<id_padre></id_padre>
</reg>
<reg>
<id>11</id>
<id_padre>1</id_padre>
</reg>
<reg>
<id>12</id>
<id_padre>1</id_padre>
</reg>


se les ocurre como hacerlo?
  #3 (permalink)  
Antiguo 13/10/2004, 00:32
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años, 7 meses
Puntos: 0
Has probado en reestructurar tu xml, podrias hacer ke los hijos estén incluidos dentro del padre, como si fuera un arbol...

tu ejemplo podria quedar:

<reg>
<id>1</id>
<id_padre></id_padre>
<reg>
<id>11</id>
<id_padre>1</id_padre>
</reg>
<reg>
<id>12</id>
<id_padre>1</id_padre>
</reg>
</reg>

y asi solo tendrías q preguntar por el nº de descendientes y ya lo tendrias solucionado.
  #4 (permalink)  
Antiguo 14/10/2004, 05:54
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Si por lo que sea no pudieras cambiar ya la estructura de tu XML hice una aproximación a como lo podrias solucionar:

<xsl:for-each select="reg">

<xsl:variable name="id_actual">
<xsl:value-of select="id_class" />
</xsl:variable>

<xsl:choose>
<xsl:when test="//reg[id_class_father=$id_actual]">
<xsl:value-of select="'TIENE HIJOS!! Se puede imprimir el titulo de la tabla.'" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'NO TIENE HIJOS'" />
</xsl:otherwise>
</xsl:choose>

</xsl:for-each>

Pero es un código no terminado y mucho menos probado.. quizás necesite retoques... seguramente los necesite... porque creo que // te busca del nodo actual hacia abajo del XML y por tanto no comprobaría los reg anteriores al actual... De todas formas.. si siempre los hijos se van a encontrar por debajo pues no habría problema.

Si te estancas con ese codigo intentaria hacerte un ejemplo completo y que se pueda probar pero ahora no me da tiempo a mas.

Quiero resaltar que la solución de cabral es la mas acertada. incluso te ahorrarias indicar la etiqueta del padre de cada reg. Yo optaria por reestructurar el XML. Es mas elegante en forma de arbol y se ve mas claro quien es hijo de quien.

Un beso
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
  #5 (permalink)  
Antiguo 17/10/2004, 09:45
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 3 meses
Puntos: 16
Hola Chicos.

Muchas gracias por la ayuda, Me han iluminado bastante en el encontrar la solucion ami problema. Muchas Gracias !!!

Vamos Viendo.
Sobre lo propuesto de cambiar la forma del XML para poder ver bien los datos con el xsl tuve una inmediata negacion.

Debido a que si hiciera eso, de alguna u otra forma estaria acomodando mis datos en pro del "como mostrarla", osea estaria mezclando los datos con su formato, lo cual es exactamente por lo cual se creo el xml y el xsl; para mantener separado el que voy a mostrar del como lo voy a mostrar.


Ahora bien. Lo propuesto por helvira me ayudo muchisimo a comprender el manejo de las variables en xsl, que mas que varaibles son constantes.

Luego de partirme la cabeza por un buen rato, di con la solucion. Gracias a los 2 !!!


BAsicamente lo que hice fue pasar el valor del primer item amostrar a una variable llamada primero.
y luego en el for each, preguntar si es que esta variable es igual al el item actual del bucle, es por que el primer item de la lista y por lo tanto debe imprimirse el encabezado de la tabla.

he aqui el codigo . GRacias nuevamente.





<xsl:variable name="primero">
<xsl:value-of select="/raiz/canal_publicaciones/reg[id_class_father =//canal_publicacion_actual][1]/id_class" />
</xsl:variable>



<xsl:for-each select="raiz/canal_publicaciones/reg">
<xsl:if test="id_class_father = //canal_publicacion_actual">

<xsl:if test="id_class =$primero">
<div id="encabezado_sub_canales_canal_actual">
SUB CANALES:
</div>
</xsl:if>

<div class="listado_sucanales_canal_actual">
<p>
<img src="{imagen_listado_canal_publicaciones}" class="imagen_listado_subcanal_actual__imagen_list ado_canal_publicaciones" />
</p>
<p>
<a href="dc_canal_publicaciones.asp?id_class={id_clas s}" class="texto_nombre_subcanal_info_subcanales">
<xsl:value-of select="nombre_canal_publicaciones" />
</a>
<br />
</p>

<p>
<a href="dc_canal_publicaciones.asp?id_class={id_clas s}" class="texto_glosa_subcanal_info_subcanales">
<xsl:value-of select="glosa_canal_publicaciones" />
</a>
<br />
<span class="texto_extra_info_subcanal_info_subcanales"> Publicaciones:
<xsl:value-of select="cantidad_canal_publicaciones" />
</span>
</p>

</div>
</xsl:if>





</xsl:for-each>

  #6 (permalink)  
Antiguo 18/10/2004, 04:18
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 1 mes
Puntos: 5
Malegra que le hayas dado una solución, pero no estoy de acuerdo con lo que has dicho de reestructurar tu código XML.

El cambio en la estructura del XML que te propuso incialmente cabral y de la que estoy totalmente de acuerdo no tiene nada que ver con el diseño. Si te das cuenta, si construyes los nodos reg en forma de árbol no estás indicando nada del diseño sino que estás dejando muchísimo mas claro que existe una relación entre los nodos reg en el concepto de padres, abuelos, bisabuelos, tatarabuelos, hijos, nietos, bisnietos, tataranietos, etc que si usas un atributo para especificar quien es el padre de cada nodo reg como haces con @id_class_father.

Pero vamos, es mi opinión.. no tiene nada que ver con diseño. Diseño es colores, tamaños posición en la pantalla, etc... que quede mas claro visualmente a un solo golpe de XML que los nodos reg estan relacionados en forma de árbol no tiene nada que ver con el diseño. Sólo simplificas y facilitas la compresión inmediata de que relación guardan los nodos a nivel de contenidos.

Un beso
__________________
BUSCO TELETRABAJO
Experiencia de mas de 4 años como desarrolladora web en PHP, ASP, XML, XSL, JavaScript, MySQL, PostGres, SQLServer, ...
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 23:32.