XSLT:检查节点列表中是否找到节点
问题描述:
我需要检查节点列表中是否存在特定值。XSLT:检查节点列表中是否找到节点
现在我正在使用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>
我希望能在一个镜头中得到它。我怎么能够?
答
按照使用方法使用时,current()
与.
(请参阅第12.4部分)相同。然而,从广义上讲,current
的目的是能够从谓词中获取整个表达式的上下文节点(其中.
代表谓词的上下文)。
我想这种区别的微妙可能会造成一些混淆。
只有当整个表达式的上下文节点的字符串值与$ thisProduct相同时,此XPath表达式才会成功。这显然不是你的愿望:如果有相同的字符串值$ thisProduct内$ChildList
节点
$ChildList[string(current())=string($thisProduct)]
这个表达式会成功。
$ChildList[string(.)=string($thisProduct)]
即它看起来通过$ChildList
对于其中表达string(.)=string($thisProduct)
是真的节点。
答
使用:
$thisProduct = $ChildList
在壳体thisProduct
被定义为包含一些原子值(不是一个节点集合或XPath 2.0中的序列),和$ChildList
是一个节点集(或序列在XPath 2.0中),那么当$ChildList
的节点(或XPath 2.0中的项目)的字符串值等于字符串值$thisProduct
时,上述XPath表达式的计算结果为true()
。
您可以在任何xsl:template
指令的任何XSLT条件指令(xsl:if
或xsl:when
)或匹配图案(match
属性)的属性test
使用此短表达。
非常感谢。这个对我有用。 – Kangkan 2011-12-23 13:33:01