动态更改xslt中的值

时间:2015-11-26 10:30:12

标签: xml xslt

我在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>

但这也不起作用。

2 个答案:

答案 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属性。