我在网站上环顾四周,但无法找到特定XSL问题的解决方案。如果你认为这是一个重复的帖子,我道歉并感谢你指出正确的方向。
基于下面相对简单的XML数据集,我想按项目创建一个表,但也将条目限制为更容易“消化”的项目,如该项目的“最新”10。
+---------------------------------------------------+
| Alpha | Beta |
+---------------------------------------------------+
| Log_20091014_0900PM.xml | Log_20091015_0900PM.xml |
| Log_20091013_0900PM.xml | ... |
| ... | |
+---------------------------------------------------+
| Gamma | Delta |
+---------------------------------------------------+
| ... | ... |
+---------------------------------------------------+
表单的XML源数据:
<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>
我可以使用以下XSL的适当变体显示每个项目的 ALL 结果:
<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>
问题:
是否可以将结果限制为“最新”10(或20 ......)?如果是这样,你会怎么建议这样做?
我尝试以下列方式使用position()
,例如
<xsl:for-each select="(LogResults/Result) [position < 11]">
或
<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>
但到目前为止我无法让它发挥作用。当然,因为现在更多的是追踪和错误。
非常感谢您阅读本书以及任何可能的建议。 -T
答案 0 :(得分:13)
你非常接近正确的解决方案。
使用强>:
<xsl:for-each select="LogResults/Result[Project='Alpha']">
<xsl:sort select="Data" order="descending" />
<xsl:if test="not(position() > 10)">
<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>