Miré alrededor en el sitio pero no pude encontrar una solución a un problema XSL en particular. Si reconoces esto como una publicación duplicada, me disculpo y agradeceré que me apuntes en la dirección correcta.Límite ordenado xsl condicional: para-cada resultado para n valores
Basado en el conjunto de datos XML relativamente simple a continuación, quiero crear una tabla por proyecto, pero también limitar las entradas a algo más 'digestible' como el '10 más nuevo' para ese proyecto.
+---------------------------------------------------+
| Alpha | Beta |
+---------------------------------------------------+
| Log_20091014_0900PM.xml | Log_20091015_0900PM.xml |
| Log_20091013_0900PM.xml | ... |
| ... | |
+---------------------------------------------------+
| Gamma | Delta |
+---------------------------------------------------+
| ... | ... |
+---------------------------------------------------+
datos de origen XML de la forma:
<LogResults>
<Result>
<Project>Alpha</Project>
<Data>Log_20091013_0900PM.xml</Data>
<Name>Log_20091013_0900PM.xml</Name>
</Result>
<Result>
<Project>Alpha</Project>
<Data>Log_20091014_0900PM.xml</Data>
<Name>Log_20091014_0900PM.xml</Name>
</Result>
<Result>
<Project>Beta</Project>
<Data>Log_20091015_0900PM.xml</Data>
<Name>Log_20091015_0900PM.xml</Name>
</Result>
<Result>
<Project>Gamma</Project>
<Data>Log_20091016_0900PM.xml</Data>
<Name>Log_20091016_0900PM.xml</Name>
</Result>
<Result>
<Project>Delta</Project>
<Data>Log_20091019_0900PM.xml</Data>
<Name>Log_20091019_0900PM.xml</Name>
</Result>
<Result>
<Project>Delta</Project>
<Data>Log_20091020_0900PM.xml</Data>
<Name>Log_20091020_0900PM.xml</Name>
</Result>
...
</LogResults>
soy capaz de mostrar TODAS resultados para cada proyecto con variaciones adecuadas de lo siguiente XSL:
<xsl:for-each select="LogResults/Result">
<xsl:sort select="Data" order="descending" />
<xsl:if test="(Project='Alpha')">
<li>
<a style="font-size:11pt;">
<xsl:attribute name="href">
Alpha/<xsl:value-of select="Data" />
</xsl:attribute>
<xsl:value-of select="Name" />
</a>
</li>
</xsl:if>
</xsl:for-each>
Pregunta :
¿Es posible limitar los resultados a los 10 más nuevos (o 20 ...)? Y si es así, ¿cómo sugerirías que esto se haga?
He intentado utilizar position()
de la siguiente manera, por ejemplo,
<xsl:for-each select="(LogResults/Result) [position < 11]">
o
<xsl:if test="(Project='Alpha')">
<xsl:for-each select=". [position < 11]">
<li>
<a style="font-size:11pt;">
<xsl:attribute name="href">
Alpha/<xsl:value-of select="Data" />
</xsl:attribute>
<xsl:value-of select="Name" />
</a>
</li>
</xsl:for-each>
</xsl:if>
Pero hasta ahora no pude conseguir que funcione. Ciertamente porque es más rastro y error en este momento.
Muchas gracias por leer este y cualquier posible consejo. -T
Buena pregunta (1). Ver mi respuesta para una solución detallada. –