XSLT:计算循环内案例的迭代次数

时间:2015-10-02 10:54:08

标签: xslt count xsl-fo

我有两个循环,想要计算案例OKNotOK的迭代以及xslt文件中的整体案例。 我怎么这么冷?如果我想知道两次迭代的总和,我怎么写呢?

我的For循环如下:

   <xsl:for-each select="test">
       <xsl:variable name="LinkName" select="attribute::name"/>
           <tr>
              <th style="text-align:left;vertical-align:top;position:"><a name="{$LinkName}"><xsl:value-of select="$LinkName"/></a></th>
                <xsl:for-each select="descendant::node()">
                  <xsl:choose>                                  
                    <xsl:when test="attribute::state='NotOK'">
                        <tr>
                            <td bgcolor="red"><xsl:value-of select="description"/></td>
                        </tr>
                    </xsl:when>
                    <xsl:when test="attribute::state='OK'">
                        <tr>
                            <td bgcolor="lime"><xsl:value-of select="description"/></td>
                        </tr>
                    </xsl:when>
                  </xsl:choose>
                </xsl:for-each>
             </tr>
    </xsl:for-each>

更新

               <table>
                     <tr bgcolor="coral">
                        <th>Test cases</th>
                        <th>Info</th>
                    </tr>
                    <xsl:for-each select="test">
                        <xsl:variable name="Summation"/>
                        <xsl:variable name="LinkIt" select="@name"/>
                        <xsl:choose>
                            <xsl:when test="descendant::node()/@state='NotOK'">
                                <tr>
                                    <td bgcolor="red"><a href="#{$LinkIt}" title="click for Information"><xsl:value-of select="$LinkIt"/></a></td>
                                    <td>
                                        <xsl:value-of select="count(descendant::node()[@state='NotOK'])"/> of <xsl:value-of select="count(descendant::node()[@state='OK']) + count(descendant::node()[@state='NotOK'])"/>
                                    </td>                                       
                                </tr>
                            </xsl:when>
                            <xsl:when test="descendant::node()/attribute::state='OK'">
                                <tr>
                                    <td bgcolor="lime"><a href="#{$LinkIt}" title="click for Information"><xsl:value-of select="$LinkIt"/></a></td>
                                    <td>
                                        ---
                                    </td>

                                </tr>
                            </xsl:when>
                        </xsl:choose>                           
                    </xsl:for-each>
                </table>

1 个答案:

答案 0 :(得分:0)

for-each不是循环。如果要计算test元素的所有后代节点,则只需使用<xsl:value-of select="count(test/descendant::node())"/>。您还可以向XPath表达式添加谓词,例如count(test/descendant::node()[attribute::state='NotOK'])

<xsl:for-each select="test">内部节点内部是一个test元素,因此任何计数表达式都应该与...相关。 count(descendant::node()[attribute::state='NotOK'])