Инициируйте преобразование, используя правильно сконструированный экземпляр XsltSettings , так что функция документа допускается .
Вот пример:
// Create the XsltSettings object with the document fn allowed.
XsltSettings settings = new XsltSettings(true,false);
// Create the XslCompiledTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("sort.xsl", settings, new XmlUrlResolver());
Ваш другой вопрос :
На более общем замечании - распространен ли такой запрос XPath?Я попал в какую-то гигантскую ловушку XSLT, о которой я не знаю?Собирается ли это сделать что-то сумасшедшее, например медленные веб-браузеры, до полной остановки?
Единственная ошибка в том, что это может вызвать повторный анализ таблицы стилей XSLT, и это относительно медленная операция,
Еще более важно то, что вы используете сокращение //
, которое почти наверняка вызовет проблемы с производительностью.
Гораздо лучше использовать этот трюк только для глобальных переменных, а затем использовать это выражение:
document('')/*/xsl:variable[@name='test']
Наконец, в случае, если вас не беспокоит потеря переносимости между процессорами XSLT 1.0, более эффективно использовать функцию расширения, зависящую от реализации xxx:node-set()
, для преобразования RTF переменной в обычный узел-задавать.Здесь можно использовать exslt:node-set()
при условии, что процессор XSLT реализует EXSLT.Это все еще обеспечивает относительно большую степень переносимости, поскольку многие процессоры XSLT, включая XslCompiledTransform, поддерживают exslt:node-set()
.