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

Buscar Nodos en XSL

Estas en el tema de Buscar Nodos en XSL en el foro de Programación General en Foros del Web. Tengo el siguiente xml. <?xml version="1.0"?> <cargas> <carga numero="101" fecha="19/04/2004"/> <carga numero="102" fecha="21/04/2004"/> <carga numero="103" fecha="26/04/2004"/> </cargas> Desde <xsl:template match="/"> llamo al template <xsl:apply-templates select="/cargas/carga"/>, ...
  #1 (permalink)  
Antiguo 02/06/2004, 16:31
 
Fecha de Ingreso: abril-2004
Ubicación: Juli - Puno - Perú
Mensajes: 51
Antigüedad: 20 años, 10 meses
Puntos: 0
Buscar Nodos en XSL

Tengo el siguiente xml.
<?xml version="1.0"?>
<cargas>
<carga numero="101" fecha="19/04/2004"/>
<carga numero="102" fecha="21/04/2004"/>
<carga numero="103" fecha="26/04/2004"/>
</cargas>

Desde <xsl:template match="/"> llamo al template
<xsl:apply-templates select="/cargas/carga"/>, en la cual tengo como el que sigue
<xsl:template match="carga">
<xsl:variable name="FechaCarga" select="21/04/2004"/>
<xsl:if test="@fecha[.=$FechaCarga]">
<xsl:call-template name="BuscaCargaAnterior">
<xsl:with-param name="NumOrd" select="number(@numero)-1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="BuscaCargaAnterior">
<xsl:param name="NumOrd"/>
<xsl:for-each select="*/cargas/carga/@numero[.=string($NumOrd)]">
<xsl:value-of select="*/cargas/carga/@fecha"/>
</xsl:for-each>
</xsl:template>

Lo que se quiere en este código es buscar en un nodo con una fecha de entrada que es "21/04/2004"
y obtengo el número, luego resto menos 1 a éste número y nuevamente quiero encontrar la fecha "19/04/2004"
en el nodo buscado con parámetro de entrada número, pero no me resulta, alguna idea para solucionar este tema?
Esto está pensado para hacer la navegación de los dopcumentos xml tanto para ir al anterior y siguiente
de los documentos xml.
__________________
Juli - La Pequeña Roma Aymara
  #2 (permalink)  
Antiguo 03/06/2004, 02:55
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 23 años, 4 meses
Puntos: 5
La idea de restar 1 sí funciona (aunque personalmente no creo que sea la mejor).
Los fallos que tenías en tu código eran dos:

1. Te faltaban comillas simples al select de tu variable FechaCarga
2. Tenías mal la expresión XPath en el template BuscaCargaAnterior

Tu XSL queda de la siguiente manera:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="cargas">
<xsl:apply-templates select="carga"/>
</xsl:template>

<xsl:template match="carga">
<xsl:variable name="FechaCarga" select="'21/04/2004'"/>
<xsl:if test="@fecha[.=$FechaCarga]">
<xsl:call-template name="BuscaCargaAnterior">
<xsl:with-param name="NumOrd" select="number(@numero)-1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>

<xsl:template name="BuscaCargaAnterior">
<xsl:param name="NumOrd"/>
<xsl:for-each select="//carga/@numero[.=string($NumOrd)]">
<xsl:value-of select="//carga/@fecha"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Ciaoo
  #3 (permalink)  
Antiguo 11/06/2004, 19:08
 
Fecha de Ingreso: abril-2004
Ubicación: Juli - Puno - Perú
Mensajes: 51
Antigüedad: 20 años, 10 meses
Puntos: 0
Helbira, gracias por las soluciones que nos brindas.
Lo que quiero hacer en mi página de xml es que cargo un contenido llamado estadocargas[ddmmaaNNN].xml, formado por la fecha y el número correlativo conforme se vaya creando, del cual este archivo tiene una fecha, sin embargo, para la navegación del <anterior> y <siguiente>, veo la posibilidad de manejar por dos parámetros que son el 'numero' y 'fecha', que cuando busco por fecha no habría problema de buscar nodos mas que sólo una vez, el problema está en que cuando quiero ver el contenido del archivo inmediato anterior del actual (es por eso que resto menos 1 el correlativo porque no necesariamente se genera este archivo todos los días) no puedo buscar otra vez en el mismo archivo cargas.xml ahora la solución que me diste funciona en este caso, y cuando inserto varios nodos y suponiendo que estoy en el penúltimo nodo quiero ir al nodo anterior siempre se posiciona en el primer nodo.
Le agradezco si tiene alguna otra idea para hacer lo que estoy pensando, si es posible le mando mis archivos del que estoy trabajando por correo, mi mail es [email protected]
__________________
Juli - La Pequeña Roma Aymara
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 17:55.