2012-07-18 187 views
0

我試圖運行下面的模板:爲什麼不是local-name()返回任何東西?

<xsl:template match="*[starts-with(., 'ATTITUDE_')]/text()"> 
<xsl:variable name="ElementName" select="local-name()"/> 
<xsl:variable name="vVal" select= "$vAttitudes[. = substring-after(current(), '_')]/@val"/> 
<xsl:choose> 
    <xsl:when test="contains($ElementName, 'Refuse')"> 
     <xsl:value-of select="civf:book-capitalise($vAttitudes[@val = $vVal+1])"/> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:value-of select="civf:book-capitalise($vAttitudes[@val = $vVal])"/> 
    </xsl:otherwise> 
</xsl:choose> 
</xsl:template> 

所以前提是,發現元素的名稱,在它的名稱,然後「doTheThing」 +1如果它有文本「垃圾」否則只是「doTheThing」。然而,這個測試總是失敗,所以即使元素名稱中包含「拒絕」,也不會調用+1。如果我只輸出本地名稱,那麼我也會空着。爲什麼local-name()不在這裏工作?

我以前嘗試先從模板:

<xsl:template match="*[contains(., 'Refuse')]/name()"> 

但撒克遜人抱怨說,我在比賽順序運行了太多的功能。

對於不太瞭解XSLT,我很抱歉。

+0

請重新縮進代碼,以便''不會增加縮進級別。這很混亂。 – 2012-07-18 06:55:35

+0

完成。對於那個很抱歉。 – Quibblesome 2012-07-18 06:58:52

回答

1

我相信local-name()不起作用,因爲您匹配文本節點(/text()match屬性),文本節點沒有本地名稱。

我不確定你想要做什麼,但我不認爲你實際上想匹配/text(),而是整個元素,並獲得其後text()

或者,您可以嘗試使用local-name(..)來獲取父節點的名稱,但我不確定這一點。