反增加条件声明

时间:2014-08-11 19:15:16

标签: xml xslt

我需要一个循环来遍历每个PV_RiskAssessment并测试一个名为@RPN的变量,所以每当RPN落在0-36的范围内时,我想将变量增加1.所以基本上,如果有3个在这个范围内,我想要打印3.但我得到的是1-36的所有数字的打印循环...(我已经删除了模板,因为它不起作用)

        <xsl:for-each select="Root/individualCQA">
          <tr>            
              <td valign="top">
                <xsl:for-each select="PV_RiskAssessment">

                <p align="center">
                  <xsl:if test="@RPN &gt;'0' and @RPN &lt;'36'">
                     <!-- I want to print the number of CPPs here that fall under this range-->
                  </xsl:if>
                </p>
                </xsl:for-each>
              </td>
         </tr>
        </xsl:for-each>

2 个答案:

答案 0 :(得分:2)

在XSLT中,您不需要使用递增计数器循环以获取某些内容的总数。您可以简单地使用(从适当的上下文):

count(some-node[some-predicate])

例如,以下样式表:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <table>
        <xsl:for-each select="Root/individualCQA">
            <tr> 
                <td><xsl:value-of select="@CQA"/></td>
                <td><xsl:value-of select="count(PV_RiskAssessment[@RPN > 0 and @RPN &lt; 36])"/></td>
            </tr>   
        </xsl:for-each>
    </table>
</xsl:template> 

</xsl:stylesheet>

应用于输入的简化版本时:

<Root>
    <individualCQA CQA="Dissolusion">
        <PV_RiskAssessment RPN="500" />
        <PV_RiskAssessment RPN="216" />
        <PV_RiskAssessment RPN="1" />
    </individualCQA>
    <individualCQA CQA="Hardness (Compression)">
        <PV_RiskAssessment RPN="6" />
    </individualCQA>
</Root>

将返回:

<?xml version="1.0" encoding="utf-8"?>
<table>
   <tr>
      <td>Dissolusion</td>
      <td>1</td>
   </tr>
   <tr>
      <td>Hardness (Compression)</td>
      <td>1</td>
   </tr>
</table>

答案 1 :(得分:1)

  

我需要一个循环来遍历每个PV_RiskAssessment并测试一个名为@RPN的变量,所以每当RPN落在0-36的范围内时,我想将变量增加1。

这是对您提出的问题解决方案的非常程序性的描述,而不是对问题的良好描述。一般来说,对于XSLT,从问题描述开始要好得多。

程序性较少的描述是:我想知道有多少PV_RiskAssessment元素的值@RPN在0-36范围内。

这种描述更自然地转化为XSLT解决方案:

count(PV_RiskAssessment[@RPN >= 0 and 36 >= @RPN])