Как улучшить переопределение / перезапись переменных в XSL? - PullRequest
3 голосов
/ 18 мая 2010

Я хочу сделать следующее:

  1. Объявить переменную
  2. Перейдите в оператор if
  3. Перезаписать переменную

XSL говорит, что я не могу объявить переменную дважды, так что я могу сделать, чтобы улучшить этот шаг?

Другим подходом было проверить, установлена ​​ли переменная вообще. Я сделал это, потому что пропустил первый шаг и объявил переменную в операторе if. В другом операторе if я хотел проверить, существует ли вообще переменная.

Ответы [ 3 ]

5 голосов
/ 21 мая 2010

Если бы вы упомянули пример кода, в котором, по вашему мнению, вам нужно «перезаписать переменную», то любой из экспертов, например Томалак, Димитр предложил бы вам лучший (альтернативный) вариант / предложение.

Хорошо. Если это просто ваш вопрос (например, как можно иметь дело с языком, где переменные нельзя изменять !!! ??), то держу пари, что вы будете проясняться по мере того, как продолжите практиковать ..

Когда я начинал свою карьеру с XSLT в качестве новичка, даже у меня был тот же вопрос ... но вскоре я понял ... Нам не нужны переменные для изменения . ;);)

Мне приятно работать с XSLT.
Вы можете относиться к шаблонам так, как вы относитесь к функциям и процедурам. (не точно)
Вы можете вызывать их рекурсивно ..
Степень манипулирования данными, которую вы можете себе представить, может быть достигнута тем или иным способом ... (может быть, не намного проще, но не невозможным, по крайней мере) ..


возвращаясь к вашему вопросу, если вам действительно нужно изменить значение переменной .., тогда не стесняйтесь определять новую переменную ..!? Используйте математические операторы, встроенную функцию и т. Д. Для значения предыдущей переменной, и вместо того, чтобы присваивать эту же переменную обратно ... назначьте ее новой .. и используйте по своему усмотрению.


Это может быть неэффективный метод, но может быть Шаг 1.

С другой стороны .. вы можете отправить выражение .. [like translate(., abc, ABC)] в качестве параметров (параметров) другим шаблонам .. или записать непосредственно в виде вывода .. !! чтобы избежать изменения переменной. :))

2 голосов
/ 18 мая 2010

Как вы обнаружили, стандарт xslt требует после :

Привязка скрывает другую привязку, если связывание происходит в точке, где другая привязка видна, а привязки имеют одно и то же имя. Это ошибка, если привязка установлена элемент xsl: variable или xsl: param внутри шаблона другой привязка, установленная переменной xsl: или элемент xsl: param также внутри шаблон. Это не ошибка, если привязка, установленная переменной xsl: или xsl: param элемент в шаблоне затеняет другую привязку, установленную верхний уровень xsl: variable или xsl: param элемент.

Решение здесь зависит от того, что вы действительно хотите сделать.

  • Если вы хотите, чтобы переменная принимала одно значение для всего шаблона, но вы хотите, чтобы это значение зависело от условия, поместите или, более вероятно, внутри < xsl: variable> element
  • Если вы хотите, чтобы переменная принимала другое значение только внутри блока , то либо
    • Использовать другое имя переменной или
    • Поместите внутри и снова определите переменную внутри вызываемого шаблона.
1 голос
/ 18 мая 2010

Вот несколько вопросов, которые имеют такое же неправильное представление о переменных XSLT, как и у вас.

Рекомендуется прочитать ответы на эти вопросы. ;)

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