我在Choose
内使用When
和for-each
进行多项条件检查
例如,以下简单地检查某个节点的总和,并检查该值是否小于50
<xsl:when test="sum(scores/score) < 50">
<td>
<xsl:text>A1</xsl:text>
</td>
</xsl:when>
我有五个这样的,它们运行良好,除了最后一个进行多次检查。
我需要检查是否满足这两个条件
@mandatory
的属性score
等于'True'
,至少有一个score
如果满足这两个条件,我需要运行另一个条件
score
的值除以另一个属性weight
<xsl:text>
我试过了
<xsl:when test="sum(scores/score) > 20 and @mandatory='True'">
<td>
<xsl:text>F1</xsl:text>
</td>
</xsl:when
这甚至无法对mandatory
是否等于True
进行第二次检查
即使我使用路径scores/score/@mandatory
我已经尝试将第二个条件移动到嵌套在if
内的when
但是也失败了
<xsl:when test="sum(scores/score) > 20">
<xsl:if test="@mandatory='True'" // even if I use scores/score/@mandatory
<td>
<xsl:text>F1</xsl:text>
</td>
</xsl:when
所以基本上它在第一道障碍时失败了。我想要实现的另一个条件是将scores/score
除以scores/score/@weight
我想到了但是还没有能够到达那里玩它
<xsl:if test="(scores/score) div (scores/score/@weight) < 0.5">
// print result into table
</xsl:if>
以下是与xslt
相关的一些示例xml <scores>
<score no="1" weight="10" mandatory="False">8</score>
<score no="2" weight="20" mandatory="True">13</score>
</scores>
只是一个额外的说明。 scores
节点可能包含两个以上score
个元素。此外,不一定必须是具有mandatory
值的"True"
属性,同样可能存在多个具有mandatory="true"
属性的元素。
以下xml示例有效
多个mandatory="true"
<scores>
<score no="1" weight="10" mandatory="False">8</score>
<score no="2" weight="20" mandatory="True">13</score>
<score no="3" weight="50" mandatory="True">35</score>
</scores>
否mandatory="true"
<scores>
<score no="1" weight="10" mandatory="False">8</score>
<score no="2" weight="20" mandatory="False">13</score>
<score no="3" weight="50" mandatory="False">35</score>
</scores>
答案 0 :(得分:1)
假设context元素是scores
的父元素,那么以下XPath表达式应该可以测试前两个项目符号条件:
sum(scores/score) > 20 and scores/score/@mandatory='True'
然后接下来的两个项目符号可以转换为XPath,如下所示:
scores/score[. div @weight < 0.5]