Sea*_*man 1 xml xslt formatting
我怎样才能修改下面的xsl,以便在for-each循环中放置图像,每个表行放置2个图像,而不是4个(它当前的作用).
我相信它与mod功能有关吗?
我尝试将foreach兄弟循环拆分到另一行,但只有第一个图像显示在第一行,其余图像显示在第二行.
<xsl:for-each select="Finding">
<xsl:if test="FindingType = 'A'">
<xsl:variable name="nImage" select="count(Image)" />
<tr><td class="di"><table width="100%" class="findings">
<tr><td class="shade" colspan="4"><p class="g"><b>Finding</b></p></td></tr>
<xsl:for-each select="Image[position() mod 4 = 1]">
<tr><td width="25%" align="left" valign="top"><p class="g"><img src="{.}" height="128" width="128" hspace="12"/><br />
<xsl:value-of select="@Type" /><xsl:text> </xsl:text> <xsl:value-of select="@SubType" />
<xsl:if test="@Position != ''"> (<xsl:value-of select="@Position" />) </xsl:if><br /><br />
</p>
</td></tr>
<tr><xsl:for-each select=". | following-sibling::Image[position() < 4 and (position() mod 4 = 0 or position() mod 4 = 1 or position() mod 4 = 2)]">
<td width="25%" valign="top" align="left"><p class="g">
<xsl:if test="(string-length(following-sibling::Image/.) > 0)">
<img src="{following-sibling::Image/.}" height="128" width="128" hspace="12" />
</xsl:if>
<br />
<xsl:value-of select="following-sibling::Image/@Type" /> <xsl:text> </xsl:text>
<xsl:value-of select="following-sibling::Image/@SubType" />
<xsl:if test="following-sibling::Image/@Position != ''"> (<xsl:value-of select="following-sibling::Image/@Position" />) </xsl:if>
<br /><br /></p>
</td>
</xsl:for-each>
<xsl:if test="$nImage = 2">
<td width="25%" />
</xsl:if>
</tr>
Run Code Online (Sandbox Code Playgroud)
答案很简单:更换4的2,甚至更好,定义一个全局,参数pNumCols与价值2.
您将进行以下更改:
在全球范围内添加此行:<xsl:param name="pNumCols" select="2"/>
替换:
<xsl:for-each select="Image[position() mod 4 = 1]">
同
<xsl:for-each select="Image[position() mod $pNumCols = 1]">
0.3.替换:
<xsl:for-each select=". | following-sibling::Image
[position() < 4
and (position() mod 4 = 0 or position() mod 4 = 1
or position() mod 4 = 2)]">
Run Code Online (Sandbox Code Playgroud)
有:
<xsl:for-each select=". | following-sibling::Image
[not(position() >= $pNumCols)]">
Run Code Online (Sandbox Code Playgroud)
请注意:
<xsl:for-each select=". | following-sibling::Image
[position() < 4
and (position() mod 4 = 0 or position() mod 4 = 1
or position() mod 4 = 2)]">
Run Code Online (Sandbox Code Playgroud)
相当于更短的:
<xsl:for-each select=". | following-sibling::Image[position() < 4 ]">
Run Code Online (Sandbox Code Playgroud)