2017-01-25 7 views
0

Мне нужно предоставить таблицу стилей XSLT аргументом, который может содержать различный объем данных, определенный во время выполнения. Я пытаюсь получить различное количество уникальных QNames в таблице стилей, которые затем ссылаются на оценку строк XPath. Моя первоначальная попытка состояла в том, чтобы предоставить эти данные в виде отдельного XML-документа, а затем использовать функцию document() для доступа к ее контенту через <xsl:variable>. Это, однако, оказалось хлопотным в моем случае.Существуют ли ограничения <xsl:param> для передачи параметров в таблицу стилей, о которой следует знать?

Поскольку я полагаться на болезненную 1.0 версии стилей и нужно оценивать строковые значения в XPath выражений с использованием функции dyn:evaluate EXSLT, которая отказывается обрабатывать фрагменты результирующего дерева внутри XPath переменных (как описано here), я решил передать аргумент таблице стилей как строку, разделенную пробелами, через <xsl:param>, где каждое значение является квалифицированным именем в нотации Кларка, например {org:example:foo}name.

Это решение работает, однако я заинтересован в использовании <xsl:param> для чего-то подобного. Следует ли злоупотреблять <xsl:param> описанным выше способом? Существуют ли какие-либо ограничения, о которых следует знать при выполнении этого, например ограничения по длине?

+0

Как и сейчас, ваш вопрос слишком широк или, скажем, ненаправленный. Почему вы предполагаете, что такой недостаток будет «xsl: param»? Произошел ли какой-либо из ваших экспериментов с ним или вы заметили какие-либо проблемы? –

+0

@ MathiasMüller, no. До сих пор ни один из моих тестовых случаев не удался, но это не значит, что они не могут. Я предполагаю, что должны быть ограничения. Или бы реализации, такие как Xalan, просто обрабатывали любую строку, которая помещается в ОЗУ? – predi

ответ

2

Звучит так, как будто вы используете Java и Xalan. Поскольку вы спрашиваете об ограничениях, ответ будет конкретным для продукта, который вы используете, поэтому вам действительно нужно указать это в вопросе.

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

Что касается длины строки, то маловероятно, чтобы любой процессор Java налагал ограничение, меньшее, чем максимальная длина строки Java, что составляет примерно 2^31 символа, и вы, вероятно, закончите памяти, прежде чем вы нажмете этот предел.

+0

Так что нет ничего необычного в передаче большой строки в таблицу стилей. Работает на меня. И спасибо за то, что типы, отличные от строк, могут передаваться процессору. Не знал об этом. Да, я использую Java/Xalan, но мне нужен общий ответ, который, похоже, «реализуется и зависит от платформы, а не обычно ограничен, кроме системных ресурсов». – predi