我需要一个循环来遍历每个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 >'0' and @RPN <'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>
答案 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 < 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])