xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

Почему не работает xsl:with-param


Автор Сообщение
Paranorm
Студент

Зарегистрирован: 24.04.2002
Сообщения: 81

Посетить сайт автора
[2417] Вт Май 21, 2002 23:00
Почему не работает xsl:with-param
Есть в некоем шаблоне такие строки:

Код:


<xsl:apply-templates select="some-tag">
 љ љ љ<xsl:with-param name="pMenuItemText">Etwas</xsl:with-param>
</xsl:apply-templates>



И шаблон:

Код:


<xsl:template match="some-tag">
 љ љ љ<xsl:param name="pMenuItemText"/>*)
 љ љ љ<xsl:value-of select="$pMenuItemText"/>
 љ љ љ<br/>
</xsl:template>




На выходе получаю:

Код:


*)
*)
*)
*)



То есть мой второй шаблон работает нормально, но параметр не получает.
Я где-то ошибся, рассуждаю неверно или это снова сказывается замечательные особенности используемого мною Sablotron'а?
_________________
Программист - это человек, который решает проблемы, о которых вы не знали, таким способом, который вы не понимаете...
lexi
Новичок

Зарегистрирован: 28.04.2002
Сообщения: 5

[2418] Вт Май 21, 2002 23:00
Re: Почему не работает xsl:with-param
Должно быть, дерево не передается как параметр.
Попробуй

Код:

select="'Etwas'"


в xsl:with-param указать.
_________________
Все об XSLT в книге "Технология XSLT".
Сайт издательства http://www.bhv.ru/cgi-bin/bhv.exe/card?isbn=5-94157-129-1
Books.ru http://www.books.ru/shop/books/22090
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[2419] Вт Май 21, 2002 23:00
Re: Почему не работает xsl:with-param
$ cat test.xsl

Код:


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="test">
  <xsl:apply-templates select="some-tag">
    <xsl:with-param name="pMenuItemText">Etwas</xsl:with-param>
  </xsl:apply-templates>
</xsl:template>
 
<xsl:template match="some-tag">
  <xsl:param name="pMenuItemText"/>*)
  <xsl:value-of select="$pMenuItemText"/>
  <br/>
</xsl:template>

</xsl:stylesheet>



$ cat test.xml

Код:


<test>
  <some-tag />
  <some-tag>aaa</some-tag>
</test>



$ xsltproc test.xsl test.xml

Код:


<?xml version="1.0"?>
*)
  Etwas<br/>*)
  Etwas<br/>



$ rpm -qf `which xsltproc`
libxslt-1.0.14-alt1
Xacid
Новичок

Зарегистрирован: 28.04.2002
Сообщения: 38
Откуда: Киев, Украина
[2420] Вт Май 21, 2002 23:00
Re: Почему не работает xsl:with-param

Цитата:


То есть мой второй шаблон работает нормально, но параметр не получает.



нужно перекрыть шаблон по умолчанию
то есть добавить шаблон:

Код:


<xsl:template match="*">
 <xsl:param name="pMenuItemText"/>
 <xsl:apply-templates>
  <xsl:with-param name="pMenuItemText" select="$pMenuItemText"/>
 </xsl:apply-templates>
</xsl:template>



_________________
Xacid
Paranorm
Студент

Зарегистрирован: 24.04.2002
Сообщения: 81

Посетить сайт автора
[2421] Вт Май 21, 2002 23:00
Re: Почему не работает xsl:with-param

Цитата:

нужно перекрыть шаблон по умолчанию



Вот, спасибо. Именно так и zarabotok.bbspam.com в моем варианте, который был на самом деле немного сложнее, чем я привел в вопросе.
Проблема только в том, что у меня параметров штук 15 может быть. И все их передавать в шаблоне по умолчанию и в обрабатывающем шаблоне  -  зверство. Но другого способа, похоже, нет...
_________________
Программист - это человек, который решает проблемы, о которых вы не знали, таким способом, который вы не понимаете...
Xacid
Новичок

Зарегистрирован: 28.04.2002
Сообщения: 38
Откуда: Киев, Украина
[2422] Ср Май 22, 2002 23:00
Re: Почему не работает xsl:with-param
можно ввести несколько режимов (mode) и разбить параметры на группы соотвественно по режимам
для каждого режима определить шаблон по умолчанию с необходимыми параметрами и их передачей для последующей обработки через apply-templates
во всех шаблонах каждого режима поддерживать весь набор параметров режима и передавать их дальше через apply-templates

_________________
Xacid