我需要检查节点列表中是否存在特定值。
现在我正在使用for-each,我认为这样效率不高。
<xsl:for-each select="$ChildList">
<i><xsl:value-of select="current()"></xsl:value-of> and <xsl:value-of select="$thisProduct"></xsl:value-of></i><br/>
<xsl:if test="string(current())=string($thisProduct)">
<!--<xsl:variable name="flag" select="1"/> -->
<p><b>Found!</b>
</p>
</xsl:if>
</xsl:for-each>
我想一次性拍摄。我怎么能?
答案 0 :(得分:3)
以您使用它的方式使用时,current()
与.
相同(请参阅12.4部分)。但是,current
(广泛地说)的目的是能够从谓词中获取整个表达式的上下文节点(其中.
表示谓词的上下文)。
我认为这种区别的微妙之处可能会造成一些混乱。
只有整个表达式的上下文节点的字符串值与$ thisProduct相同时,此XPath表达式才会成功。这显然不是你想要的:
$ChildList[string(current())=string($thisProduct)]
如果$ChildList
中的节点与$ thisProduct具有相同的字符串值,则此表达式将成功。
$ChildList[string(.)=string($thisProduct)]
即。对于表达式$ChildList
为真的节点,它会查看string(.)=string($thisProduct)
。
答案 1 :(得分:2)
使用强>:
$thisProduct = $ChildList
如果thisProduct
被定义为包含一些原子值(不是XPath 2.0中的节点集或序列),$ChildList
是节点集(或XPath 2.0中的序列)然后,当true()
中的字符串值等于字符串值$ChildList
的节点(或XPath 2.0中的项)时,上述XPath表达式的计算结果为$thisProduct
。
您可以在任何XSLT条件指令(test
或xsl:if
)的xsl:when
属性中或在匹配模式(match
属性)中使用此短表达式。任何xsl:template
指令。