Добавление новых узлов в существующую переменную XSL - PullRequest
1 голос
/ 07 декабря 2011

У меня есть вопрос о переменных в XSL. Мне не очень понятно понятие переменных.

Я создаю переменные в файле xsl как:

<xsl:variable name="vars"></xsl:variable>

Затем в каждом цикле, в каждой итерации я хочу добавить один узел к существующим переменным, таким как

<xsl:for-each select="...">
<vars><var>A</var></vars>
</xsl:for-each>

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

Я могу работать только в XSL-файле, нет разрешения на доступ или изменение XML, XSD.

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

XSLT - это функциональный язык. Это, помимо прочего, означает, что переменные, однажды определенные, являются неизменными (не может быть изменено).

Любая проблема, которая может быть решена с помощью императивного решения, также может быть решена не только в XSLT, но и на любом функциональном языке программирования - возможно, очень похожими способами. В большинстве случаев эффективные функциональные решения существуют и могут быть использованы.

Я бы настоятельно рекомендовал прочитать хорошую книгу по функциональному программированию - такую, как "Haskell в реальном мире". Не только в качестве общего интереса, но и потому, что в будущем XPath 3.0 / XSLT 3.0 и XQuery 3.0 функции являются гражданами первого сорта (функции более высокого порядка) и такие функции, как сгиб влево () , сгиб вправо () и map () являются стандартными в XPath 3.0.

Пожалуйста, укажите вашу проблему точно, и многие люди смогут предоставить решение XSLT .

1 голос
/ 07 декабря 2011

Переменные в XSLT неизменны; они не могут быть изменены. (Они также должны быть объявлены и инициализированы за один шаг.)

Похоже, вы пытаетесь построить структуру вывода. Можете ли вы вывести этот результат прямо в цикле? Если нет, вам нужно переосмыслить свой подход.

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