Cita:
Iniciado por caricatos Hola:
Encuentro esa estructura un poco extraña... estás obligado o puedes cambiarla... yo veo más coherente que los BT sean una lista, y los recorrerías con un simple xsl:for-each.
Saludos
Por desgracia estamos obligados a usar esa estructura ya que lo genera un programa, al cual no le puedoemos indicar la estructura. Acabo de fijarme que tambien puede tener otra posibilidad...
<RAMA>
<CONCEPTO>
<DESCRIPCION>TEXTO HIJO</DESCRIPCION>
<BT level="1">TEXTO PADRE 1
<BT level="2">TEXTO PADRE 2
<BT level="3">TEXTO PADRE 3
<BT level="4">TEXTO PADRE 4
</BT>
</BT>
</BT>
</BT>
<BT level="1">TEXTO OTRO 1
<BT level="2">TEXTO OTRO 2
<BT level="3">TEXTO OTRO 3
<BT level="4">TEXTO OTRO 4
</BT>
</BT>
</BT>
</BT>
</CONCEPTO>
</RAMA>
En este caso tendría que mostrar...
TEXTO HIJO: TEXTO PADRE 1, TEXTO PADRE 2, TEXTO PADRE 3, TEXTO PADRE 4 |
TEXTO HIJO: TEXTO OTRO 1, TEXTO OTRO 2, TEXTO OTRO 3, TEXTO OTRO 4 |
Hemos conseguido parte pero no tengo mucha idea de como mostrar un parametro "creado" en un template usarlo en otro...
<xsl:template match="/">
<xsl:for-each select="RAMA/CONCEPTO">
<xsl:if test="DESCRIPCION">
<xsl:param name="decrip"><xsl:apply-templates select="DESCRIPCION " />:</xsl:param> <xsl:apply-templates select="BT"/>|<xsl:text>
</xsl:text><separator/>
</xsl:if>
<xsl:if test="UF">
<xsl:apply-templates select="UF"/>: <xsl:apply-templates select="BT"/>|<xsl:text>
</xsl:text><separator/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="BT">
<xsl:if test="@level =1"><xsl:text>$decrip</xsl:text>
</xsl:if>
<xsl:value-of select="normalize-space(text())"/>
<xsl:if test="BT">,<xsl:apply-templates select="BT" /></xsl:if>
</xsl:template>
Este es el xsl que tenemos de momento, el UF es simplemente que puede venir UF en vez de DESCRIPCION.
Gracias