我们有一个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')"/>
这似乎不起作用。有什么建议吗?
答案 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并瞧!
所以,我欠你们一杯啤酒(除非你不想分享,在这种情况下,我会给你们各自的啤酒)。 :)谢谢!