我在xslt 2.0中工作,我的代码中有一行代码如下:
<xsl:value-of select="//dbquery[@id='INLIJVING']//rows/row[@BudgetaryEnvelop_Year = $RefBef][1]/@BudgetaryEnvelop_Year"/></xsl:variable>
这很好用。但我想用动态参数名而不是@BudgetaryEnvelop_Year
来编写它。
我尝试定义一个参数$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 :(得分:0)
如果要比较变量指定的属性,请尝试类似:
row[ @*[ name() = $attrName ] = $RefBef ]
@*
匹配任何属性,嵌套谓词会过滤名称为$attrName
的谓词。 (因此$attrName
不应包含@
字符。)
如果要动态评估整个表达式,则需要扩展函数。请参阅问题Evaluate dynamic string as an XPath expression。
答案 1 :(得分:0)
尝试类似的XPath;
<xsl:value-of select="//dbquery[@id='INLIJVING']//rows/row/@*[local-name()=$target]/../@BudgetaryEnvelop_Year"/>
@*
返回row
的所有属性,然后我们按属性名称过滤。这使得XPath选择了不符合要求的属性,因此我们使用..
升级回row
并下降到所需的@BudgetaryEnvelop_Year
属性。