Рекурсивный / Рефлексивный XSLT в .Net - PullRequest
3 голосов
/ 13 июня 2011

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

Может случиться так, что каждый «шаблон» на самом деле должен быть отдельным файлом, но я бы хотел, чтобы контекст (параметры, переменные, узлы контекста и т. Д.) Сохранялся на протяжении всего процесса, поэтому просто нужно иметь рекурсивные метод Transform () кажется недостаточным.

Несколько связанный вопрос: скажем, я вызываю функцию расширения внутри шаблона. Есть ли способ вызвать шаблон изнутри функции расширения? Кажется, что документация по объектам расширения очень легкая - она ​​говорит вам, как ее вызвать, но не документирует какие-либо части инфраструктуры xslt, с которыми я могу взаимодействовать.

Прошу прощения за то, что не предоставил достойного конкретного примера, но я сейчас на стадии исследования, так что все это немного абстрактно.

Andy

1 Ответ

2 голосов
/ 29 июня 2011

Если у результата преобразования есть узлы в пространстве имен http://www.w3.org/1999/XSL/Transform, то вы динамически генерируете XSLT, и для выполнения сгенерированного XSLT вам нужно запустить / вызвать новое преобразование, это нельзя сделать из XSLT (по крайней мере, не без функции расширения).

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

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

Несколько связанный вопрос: скажи я вызвать функцию расширения изнутри шаблон. Есть ли способ вызвать шаблон из расширения функционировать?

Нет, вы не можете вызвать шаблон из функции расширения.

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