2013-09-30 2 views
1

У меня проблема с файлами XSLT в реальном времени. Исходя из этого, я задаю свой вопрос здесь. У меня есть 3 xslt-файла, такие как 1.xsl, 2.xsl и master.xsl. Это master.xsl импортируется в 1.xsl и 2.xslШаблон вызова XSLT с xsl: with-param на другом шаблоне

На master.xsl, я использую это ниже кода

<xsl:call-template name="content"> 
<xsl:with-param name="request" select="$request"/> 
<xsl:call-template> 

Как мудрый, на 1.xsl,

<xsl:template name="content"> 
<xsl:param name="request" as="node()"/> 
.... 
</xsl:template> 

На 2.xsl

<xsl:template name="content"> 

.... 
</xsl:template> 

Когда я выполнение этой 2.xsl, я получаю следующее сообщение об ошибке:

XTSE0680: Parameter request is not declared in the called template

На самом деле, переменной запроса только необходимой, когда я исполняю 1.xsl. Кроме того, я не объявляю фиктивную переменную в шаблоне на 2.xsl. Например, у меня есть много файлов xslt в режиме реального времени. Таким образом, я не могу объявить одну и ту же переменную во многих файлах xslt, поскольку она будет больше времени, и она не будет последовательной.

Может ли кто-нибудь дать мне идею преодолеть это?

+0

В целях тестирования вы можете предоставить 3 из этих файлов XSL, которые содержат некоторые фиктивные данные? Чтобы мы могли посмотреть на него – NullPointer

+0

«Пока параметр объявлен в вызываемом шаблоне, вы в порядке, оставляя их вне вызова, просто позволяет им принимать значение по умолчанию, что может быть очень полезно». Вы можете проверить его [здесь] (http://www.stylusstudio.com/xsllist/200603/post50460.html) – NullPointer

ответ

2

Ну, правила XSLT 2.0 четко говорят в http://www.w3.org/TR/xslt20/#err-XTSE0680: «В случае xsl: call-template это статическая ошибка для передачи не туннельного параметра с именем x в шаблон, у которого нет параметра шаблона с именем x, если для инструкции xsl: call-template не разрешено обратное совместимое поведение. ".

Таким образом, с помощью XSLT 2.0, если вы хотите использовать код

<xsl:call-template name="content"> 
<xsl:with-param name="request" select="$request"/> 
<xsl:call-template> 

, то вам необходимо убедиться, что любой шаблон называется content имеет этот параметр request объявлен.

Правила для apply-templates разные. Я думаю, что вы можете проверить, не можете ли вы просто написать шаблон с атрибутом match и использовать apply-templates.

+0

Собственно, файлы xslt, я не могу изменить что-либо из до < XSL: применить-шаблон>. Они были изменены другими людьми, я просто слежу за тем, как они это делали раньше. Итак, я ищу какой-то вариант, который не может повлиять на текущий. Есть идеи? – Sakthivel

+0

Если вы не можете изменить код, вы не можете исправить эту проблему. –

Смежные вопросы