2015-11-26 51 views
1

我在XSLT 2.0工作,我有一個像這樣在我的代碼行:動態更改值在XSLT

<xsl:value-of select="//dbquery[@id='INLIJVING']//rows/row[@BudgetaryEnvelop_Year = $RefBef][1]/@BudgetaryEnvelop_Year"/></xsl:variable> 

這工作得很好。但我想用動態參數名稱而不是@BudgetaryEnvelop_Year來寫這個。

我試圖定義一個PARAM $target和改變這樣的行:

<xsl:value-of select="//dbquery[@id='INLIJVING']//rows/row[$target = $RefBef][1]/@BudgetaryEnvelop_Year"/></xsl:variable> 

但是,這是行不通的。它不執行value-of。我試圖像這樣的字符串傳遞它:

<xsl:value-of> 
    <xsl:attribute name="select">//dbquery[@id='INLIJVING']//rows/row[<xsl:value-of select="$target"/>=<xsl:value-of select="$RefBef"/>][1]/@BudgetaryEnvelop_Year</xsl:attribute> 
</xsl:value-of> 

但是,這也行不通。

回答

0

如果要比較一個變量指定的屬性,你可以試試:

row[ @*[ name() = $attrName ] = $RefBef ] 

@*任何屬性匹配和嵌套謂詞過濾一個與名字$attrName。 (所以$attrName不應包含@字符。)

如果要動態評估整個表達式,則需要擴展函數。查看問題Evaluate dynamic string as an XPath expression

0

嘗試類似於XPath的XPath;

<xsl:value-of select="//dbquery[@id='INLIJVING']//rows/row/@*[local-name()=$target]/../@BudgetaryEnvelop_Year"/> 

@*返回所有的row的屬性,我們再通過屬性的名稱進行篩選。這使XPath選擇的屬性不是我們想要的屬性,因此我們使用..來提升回row並降低到期望的@BudgetaryEnvelop_Year屬性。