XSLT字段名的连接+动态变量名访问的参数值

时间:2011-08-10 18:15:34

标签: xslt

我们有一个XML文件,我们正试图找出一种动态使用的方法。

基础是:

<part>
<...>
<fldMinPriceUSD>100.00</fldMinPriceUSD>
<fldMaxPriceUSD>110.00</fldMaxPriceUSD>
<fldMinPriceCAD>120.00</fldMinPriceCAD>
<fldMaxPriceCAD>130.00</fldMaxPriceCAD>
</part>

对于我们已经获得的每个零件,我们希望在其上使用xslt来根据通过参数发送的货币获取零件价格。我们不想使用if-elses,因为我们可能希望在不更改模板的情况下增加货币列表(EUR,GBP等)。

因此,我们希望使用$dealerCurrency参数(可能是美元,加元等)与fldMinPrice连接以获取该值。这种事情甚至可能吗?我尝试了很多东西,但似乎都没有用。

到目前为止我尝试过的是:

<xsl:value-of select="format-number(str[@name=concat('fldMinPrice', $dealerCurrency)], '#.00')"/>

这似乎不起作用。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

你快到了。目前,通过使用 str @name ,您正在寻找一个名为 str 的元素,该元素具有一个名为 name 值为'fldMinPriceUSD'。您需要的是 local-name()功能,以及 node()以匹配任何节点。

<xsl:value-of select="format-number(node()[local-name()=concat('fldMinPrice', $dealerCurrency)], '#.00')"/>

即。匹配任何节点,使用'fldMinPrice'的名称(不包括名称空间)+您的货币代码。

答案 1 :(得分:0)

你们是天才。所以,在我最初的评估中,我有点不对劲。我们的实际XML看起来像这样(我在内存中输入了另一部分......我必须在某处有一些损坏的内存......必须得到替换):

<double name="fldMaxPrice">20.0</double>
<double name="fldMaxPriceCAD">19.0</double>
<double name="fldMinPrice">18.0</double>
<double name="fldMinPriceCAD">17.1</double>

所以,Tim C ......你的答案是完美的...对于我试图做同样事情的XML的另一部分。 empo,你我实际寻找的例子帮助我注意到我的原始帖子几乎是正确的,除了我有一个str我应该有一个双倍。将str更改为double并瞧!

所以,我欠你们一杯啤酒(除非你不想分享,在这种情况下,我会给你们各自的啤酒)。 :)谢谢!