2011-08-10 10 views
4

動的に使用する方法を理解しようとしているXMLファイルがあります。私たちが持って各パートのXSLTフィールド名の連結+動的変数名アクセスのパラメータ値

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

、我々はパラメータ経由で送信された通貨に基づいて一部の価格をつかむために、その上に、XSLTを使用したい:

基本はこれです。私たちはテンプレートを変更することなく、通貨のリスト(EUR、GBPなど)を拡大したいと思うかもしれないので、if-elsesを使いたくありません。

したがって、$dealerCurrencyパラメータ(USD、CADなど)を使用してfldMinPriceと連結してその値を取得したいとします。この種のことも可能ですか?私はいくつかのことを試しましたが、うまくいくものはありません。

私がこれまで試したことはこれです:

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

、これは動作するようには思えません。助言がありますか?

答えて

3

あなたはほとんどそこにいます。現時点では、あなたが要素を探しているSTR@nameを使用して属性が「fldMinPriceUSD」の値と名前を呼ばれていた STR と呼ばれます。必要なのはlocal-name()ファンクションと、いずれのノードにも一致するようにnode()です。

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

つまり、あなたの通貨コード「fldMinPrice」+の(名前空間を除く)の名前で、任意のノードと一致します。

+0

はい、彼は実際に探しています。 ''は、フォーマットしたいノードではありません。 +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> 

、ティム・C ...あなたの答えは完璧だった...私は同じことをやろうとしていたXMLの別の部分については、 empo、私が実際に探していたものの例は、オリジナルの投稿が正しいと気づくのを助けました。ただし、私は二重にしておかなければならないstrを持っていました。 strを二重に変更しました!

私はあなたにビールを借りています(あなたが共有したくない場合を除いて、私はあなた自身をあなたのお手伝いをします)。 :)ありがとう!