Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/03/2013, 01:14
ODIOelSEA
 
Fecha de Ingreso: octubre-2008
Mensajes: 6
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Adaptacion de un XML con XSL

Cita:
Iniciado por caricatos Ver Mensaje
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