XSLT Конкатенация имен полей + значение параметра для доступа к имени динамической переменной - PullRequest
4 голосов
/ 10 августа 2011

У нас есть 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 (это были бы USD, CAD и т. Д.) Для согласования с fldMinPrice для получения этого значения. Это вообще возможно? Я пробовал несколько вещей, но ни одна из них не работает.

То, что я до сих пор пробовал, это:

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

и это не похоже на работу. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 11 августа 2011

Вы почти у цели. На данный момент, используя str и @ name , вы ищете элемент с именем str , который имеет атрибут с именем name с значение 'fldMinPriceUSD'. Вам нужна функция local-name () вместе с node () для соответствия любому узлу.

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

т.е. Сопоставьте любой узел с именем (исключая пространства имен) «fldMinPrice» + код вашей валюты.

0 голосов
/ 11 августа 2011

Вы, ребята, гении. Итак, я был немного неправ в своей первоначальной оценке. Наш фактический 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>

Итак, Тим Си ... ваш ответ был идеальным ... для другой части XML, с которой я пытался сделать то же самое. empo, ваш пример того, что я на самом деле искал, помог мне заметить, что мой оригинальный пост был почти верным, за исключением того, что у меня был str, где я должен был иметь double. Изменил str на двойной и вуаля!

Итак, я должен вам, ребята, пиво (если вы не хотите делиться, в таком случае, я получу каждого по своему). :) СПАСИБО!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...