Almacenar nodos en for-each
Publicado por Jose (1 intervención) el 04/11/2008 12:55:09
Hola,
tengo un xml que tiene el siguiente aspecto:
<?xml version="1.0" encoding="UTF-8"?>
<cmanager>
<cm>
<mensaje>TELEPROCESO. Arranque IDMSV1</mensaje>
<respuesta>28-8-2008 06:57</respuesta>
</cm>
<cm>
<mensaje>TELEPROCESO. Parada IDMSV1</mensaje>
<respuesta>28-8-2008 23:01</respuesta>
</cm>
.
.
.
</cmanager>
y al que quiero aplicar una plantilla xsl para generar una página html.
El caso es que, para el caso concreto del xml de arriba, necesito poner los valores de "respuesta" en la misma fila de una tabla, algo del tipo:
------------------------------------------------------------------
| 28-8-2008 06:57 | 28-8-2008 23:01 |
------------------------------------------------------------------
pero al recorrer el xml con un <xsl:for-each select="cm">, cuando estoy en el nodo de la primera respuesta, no se si puedo o es posible acceder al nodo siguiente y recuperar la siguiente respuesta y cuando estoy en el segundo pues lo mismo.
He intentado almacenar el primer valor en un tag <xsl:variable />, pero cuando trato de acceder al valor en la siguiente iteración, me dice que la variable no esta declarada, vamos, que se queda fuera de ámbito.
También he intentado con dos xsl:if, que cuando llegue al primer nodo devuelva la primera parte de la fila:
<xsl:if test="mensaje = 'TELEPROCESO. Arranque IDMSV1'">
<tr>
<td width="20%" align="left">IDMSV1</td>
<td width="20%" align="left"><xsl:value-of select="respuesta" /></td>
</xsl:if>
y cuando llegue al segundo nodo, devuelva la segunda:
<xsl:if test="mensaje = 'TELEPROCESO. Parada IDMSV1'">
<td width="20%" align="left"><xsl:value-of select="respuesta[last()]" /></td>
<td width="20%" align="center">Tareas Procesadas</td>
<td width="20%" align="center">Tareas Canceladas</td>
</tr>
</xsl:if>
pero en este caso el navegador me dice que el tag tr no tiene su correspondiente tr de cierre y también falla.
¿Hay alguna forma de bypasear lo del tr, de recuperar el valor de respuesta del siguiente nodo o de almacenar el valor de la primera respuesta de manera que pueda recuperarlo en la siguiente iteración del for-each?.
Muchas gracias.
tengo un xml que tiene el siguiente aspecto:
<?xml version="1.0" encoding="UTF-8"?>
<cmanager>
<cm>
<mensaje>TELEPROCESO. Arranque IDMSV1</mensaje>
<respuesta>28-8-2008 06:57</respuesta>
</cm>
<cm>
<mensaje>TELEPROCESO. Parada IDMSV1</mensaje>
<respuesta>28-8-2008 23:01</respuesta>
</cm>
.
.
.
</cmanager>
y al que quiero aplicar una plantilla xsl para generar una página html.
El caso es que, para el caso concreto del xml de arriba, necesito poner los valores de "respuesta" en la misma fila de una tabla, algo del tipo:
------------------------------------------------------------------
| 28-8-2008 06:57 | 28-8-2008 23:01 |
------------------------------------------------------------------
pero al recorrer el xml con un <xsl:for-each select="cm">, cuando estoy en el nodo de la primera respuesta, no se si puedo o es posible acceder al nodo siguiente y recuperar la siguiente respuesta y cuando estoy en el segundo pues lo mismo.
He intentado almacenar el primer valor en un tag <xsl:variable />, pero cuando trato de acceder al valor en la siguiente iteración, me dice que la variable no esta declarada, vamos, que se queda fuera de ámbito.
También he intentado con dos xsl:if, que cuando llegue al primer nodo devuelva la primera parte de la fila:
<xsl:if test="mensaje = 'TELEPROCESO. Arranque IDMSV1'">
<tr>
<td width="20%" align="left">IDMSV1</td>
<td width="20%" align="left"><xsl:value-of select="respuesta" /></td>
</xsl:if>
y cuando llegue al segundo nodo, devuelva la segunda:
<xsl:if test="mensaje = 'TELEPROCESO. Parada IDMSV1'">
<td width="20%" align="left"><xsl:value-of select="respuesta[last()]" /></td>
<td width="20%" align="center">Tareas Procesadas</td>
<td width="20%" align="center">Tareas Canceladas</td>
</tr>
</xsl:if>
pero en este caso el navegador me dice que el tag tr no tiene su correspondiente tr de cierre y también falla.
¿Hay alguna forma de bypasear lo del tr, de recuperar el valor de respuesta del siguiente nodo o de almacenar el valor de la primera respuesta de manera que pueda recuperarlo en la siguiente iteración del for-each?.
Muchas gracias.
Valora esta pregunta


0