我目前在XSL中处理<xsl:foreach>
语句处理此XML文件中的所有元素。我想要做的是将第一个单独处理到其余部分。我怎样才能做到这一点?
这是我目前的代码:
<ul>
<xsl:for-each select="UpgradeProgress/Info">
<xsl:sort select="@Order" order="descending" data-type="number" lang="en"/>
<li><xsl:value-of select="." /></li>
</xsl:for-each>
</ul>
答案 0 :(得分:3)
假设您要处理第一个已排序的元素,这将测试choose语句中的位置并以不同方式处理它们:
<ul>
<xsl:for-each select="UpgradeProgress/Info">
<xsl:sort select="@Order" order="descending" data-type="number" lang="en"/>
<li>
<xsl:choose>
<xsl:when test="position()=1">
<!-- Do something different with the first(sorted) Info element -->
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="." />
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:for-each>
</ul>
答案 1 :(得分:2)
XSLT模板是您的朋友!
这种转变:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="num">
<li>
<xsl:value-of select="."/>
</li>
</xsl:template>
<xsl:template match="num[1]">
<li>
<b><xsl:value-of select="."/></b>
</li>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档时:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
生成<num>
元素的第一个(顶部)所需的特殊处理:
请注意,您甚至不必在代码中使用<xsl:if>
或<xsl:choose>
。
尽可能使用模板的强大功能。
答案 2 :(得分:0)
您可以使用xpath中的位置函数选择元素