2016-04-20 17 views
1

我知道這個問題已經被多次回答,但由於某種原因對我無效。 所以我想達到什麼是輸出元素的內容,通過使用它的屬性值來訪問它,而是決定宣佈的特定值,如屬性:

<xsl:value-of select="title[@attribute='value']"/> 

這適用於我的代碼,但我想使用一個變量,如:

<xsl:value-of select="title[@attribute='$variable']"/> 

但無論我做什麼或不同的方式我嘗試 如:

<xsl:value-of select="//title[@attribute='$variable']"/> 

<xsl:value-of select="//title[@attribute= $variable]"/> 

不ouptut什麼,我沒有得到來自撒克遜所以我不知道怎麼回事任何錯誤。


xml文件

<root> 
    <documentname> 
     <element>text</element> 
     . 
     . 
     <element1 atributename1="VALUE1">text</element1> 
     . 
     . 
     <element95 atributename1="value1" secondatribute="0001"/> 
     . 
     . 
    </documentname> 
    </root> 

XSL文件

<xsl:template match="element95 "> 
     <xsl:choose> 
     <xsl:when test="@atributename1">  
     <xsl:variable name="keyb" select="substring(@secondatribute,1,4)"/> 
     <xsl:variable name="keyval" select="substring(@atributename1, 0,6)" /> 
     <xsl:variable name="keyc"> 
     <xsl:value-of select="'upper-case($keyval)'"/></xsl:variable> 
     <a href="#{$keyc}"><xsl:value-of select="($keyb)"/>.0(<xsl:value-of select="//element1 [@atributename1=($keyc)]"/>)</a> 
    </xsl:when> 
</xsl:choose> 

輸出:

1.0() 

所需的輸出繼電器:

1.0(text) 
+0

這些都沒有爲我編譯,'''缺少。 – biziclop

+1

你能否提供一個最小的XSL樣式表和一個產生這個問題的測試文檔? – biziclop

+1

@Eugenios你最後的代碼片段看起來很好,所以如果不能看到最小但完整的例子來證明問題是不可能的,那麼就不可能看出問題 – har07

回答

0

你的問題是下到字符串文字

<xsl:value-of select="//title[@attribute='$variable']"/> 

是在說「我要的屬性值是實際字符串「$變量'「 所以你想使用:

<xsl:value-of select="//title[@attribute= $variable]"/> 

但是在設置變量時也犯了這個錯誤:

 <xsl:variable name="keyc"> 
    <xsl:value-of select="'upper-case($keyval)'"/></xsl:variable> 

使用:

 <xsl:variable name="keyc"> 
    <xsl:value-of select="upper-case($keyval)"/></xsl:variable> 

或更具可讀性

<xsl:variable name="keyc" select="upper-case($keyval)"/> 

和讀了關於字符串處理和擴展一般在xslt中。

0

這裏有一些問題,你的XSL代碼:

  • $keyc變量設置爲文本字符串'upper-case($keyval)'。刪除單引號使其被識別爲XPath表達式並進行正確評估。在你的演示中返回'value'。目前尚不清楚您在此嘗試實現的目標,但這肯定會導致//element1[@atributename1=($keyc)]稍後找不到匹配項,因爲在XML樣本中沒有atributename1的值等於'value'。您希望將substring()參數設置爲更高的長度,或者將@atributename1$keyc進行比較時使用相同長度的substring()

+1

感謝它是'大寫($ keyval)' – Eugenios