代码输出" url"每个"图像"每个网址后使用$ sep确定(超过8的限制)。
但我想设置一个条件,如果它找到例如4"图像"然后它将输出$ sep 4次(在每个之后用$ sep打印出4个url之后)。但是,当我尝试下面的代码时,它似乎没有计算图像/图像,因为计数总是1(无论有多少"图像"有)。
示例xml输入
<images>
<image>
<url>Url</url>
</image>
<image>
<url>Url</url>
</image>
<image>
<url>Url</url>
</image>
<image>
<url>Url</url>
</image>
</images>
XSL代码
<xsl:for-each select="images/image[position() <= 8]">
<xsl:value-of select="url"/> <xsl:value-of select="$sep" />
</xsl:for-each>
<xsl:variable name="set" select="images/image" />
<xsl:variable name="count" select="count($set)" />
<xsl:choose>
<xsl:when test="count='4'">
<xsl:value-of select="$sep" />
<xsl:value-of select="$sep" />
<xsl:value-of select="$sep" />
<xsl:value-of select="$sep" />
</xsl:when>
</xsl:choose>
当前输出
URl,URl,URl,URl,
想要输出
URl,URl,URl,URl,,,,,
由于
答案 0 :(得分:1)
检查$
变量时,您错过了count
符号。应该是这个......
<xsl:when test="$count=4">
(不需要4个左右的撇号,因为$ count是一个数字,尽管它仍然适用于XSLT 1.0)
编辑:考虑使用递归模板来处理XSLT中的任意数量的image
元素。
试试这个..
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" />
<xsl:variable name="sep" select="','" />
<xsl:template match="/">
<xsl:for-each select="images/image[position() <= 8]">
<xsl:value-of select="url"/> <xsl:value-of select="$sep" />
</xsl:for-each>
<xsl:variable name="set" select="images/image" />
<xsl:variable name="count" select="count($set)" />
<xsl:call-template name="pad">
<xsl:with-param name="count" select="$count" />
</xsl:call-template>
</xsl:template>
<xsl:template name="pad">
<xsl:param name="count" />
<xsl:if test="$count + 1 < 8">
<xsl:value-of select="$sep" />
<xsl:call-template name="pad">
<xsl:with-param name="count" select="$count + 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>