2011-12-23 101 views
3

我需要檢查節點列表中是否存在特定值。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> 

我希望能在一個鏡頭中得到它。我怎麼能夠?

回答

3

按照使用方法使用時,current().(請參閱第12.4部分)相同。然而,從廣義上講,current的目的是能夠從謂詞中獲取整個表達式的上下文節點(其中.代表謂詞的上下文)。

我想這種區別的微妙可能會造成一些混淆。

只有當整個表達式的上下文節點的字符串值與$ thisProduct相同時,此XPath表達式纔會成功。這顯然不是你的願望:如果有相同的字符串值$ thisProduct內$ChildList節點

$ChildList[string(current())=string($thisProduct)] 

這個表達式會成功。

$ChildList[string(.)=string($thisProduct)] 

即它看起來通過$ChildList對於其中表達string(.)=string($thisProduct)是真的節點。

+0

非常感謝。這個對我有用。 – Kangkan 2011-12-23 13:33:01

2

使用

$thisProduct = $ChildList 

在殼體thisProduct被定義爲包含一些原子值(不是一個節點集合或XPath 2.0中的序列),和$ChildList是一個節點集(或序列在XPath 2.0中),那麼當$ChildList的節點(或XPath 2.0中的項目)的字符串值等於字符串值$thisProduct時,上述XPath表達式的計算結果爲true()

您可以在任何xsl:template指令的任何XSLT條件指令(xsl:ifxsl:when)或匹配圖案(match屬性)的屬性test使用此短表達。

相關問題