параметры в xslt

Jenius

Новичок
параметры в xslt

<xsl:apply-templates select="document('udata://content/menu')//item" mode="menu" />

Вырезка из UMI.CMS

Подскажите пожалуйста, какие образом это может быть реализовано? Я правильно понимаю, что при помощи параметра udata вызывается php файл, который создает xml? Если это так, то каким образом передать параметр udata?

И второй вопрос:


<xsl:value-of select="document('celsius.xml')/celsius/result[@value=$value]"/>
А как быть если XML у меня создается динамически? Как его тогда передать с помощью фунции document() ?
Если я указываю так
<xsl:value-of select="document('http://site.ru/xml.php')/celsius/result[@value=$value]"/> Но при таком подходе очень сильно тормозится загрузка страницы.
Каким еще способом можно передать еще один xml в xslt?

xml.php - в свою очередь возвращает XML
 

FB3

Новичок
Re: параметры в xslt

Автор оригинала: Jenius
<xsl:apply-templates select="document('udata://content/menu')//item" mode="menu" />

Вырезка из UMI.CMS

Подскажите пожалуйста, какие образом это может быть реализовано? Я правильно понимаю, что при помощи параметра udata вызывается php файл, который создает xml? Если это так, то каким образом передать параметр udata?
Может быть стоит спросить разработчиков UMI? :)
Вопрос, конечно, интересный. Но мне такая реализация не совсем нравится. Тем более, они где-то говорили, что стырили у кого-то идею и переделали по своему.

Автор оригинала: Jenius
И второй вопрос:

<xsl:value-of select="document('celsius.xml')/celsius/result[@value=$value]"/>
А как быть если XML у меня создается динамически? Как его тогда передать с помощью фунции document() ?
Если я указываю так
<xsl:value-of select="document('http://site.ru/xml.php')/celsius/result[@value=$value]"/> Но при таком подходе очень сильно тормозится загрузка страницы.
Каким еще способом можно передать еще один xml в xslt?

xml.php - в свою очередь возвращает XML
Можно передать с помощью параметра. То есть скачивается нужный файл, сохраняется во временную папку, затем перед запуском транформации передается путь к нему.
Принять параметр в XSL можно с помощью <xsl:param name=""/> внутри <xsl:stylesheet/>
Передать из PHP вроде так:
http://ru2.php.net/manual/ru/xsltprocessor.setparameter.php

Соответственно:
<xsl:value-of select="document($param-name)/celsius/result[@value=$value]"/>

Ну и вообще, для общего развития :) : http://ru2.php.net/manual/ru/book.xsl.php
 

Alexandre

PHPПенсионер
Каким еще способом можно передать еще один xml в xslt?
никаким...
делается обобщенный xml из одного и второго а если нужно и третьего (etc...) файла
а вот используется несколько шаблонов для обработки
и выбирать нужно именно шаблон обработки, и в него уже передавать параметры
а не подгружать XML
 

Jenius

Новичок
За ссылку для общего развития, конечно, спасибо, но я уже там был не раз :)

По поводу udata://content/menu, Вы сказали, что такая реализация не совсем нравится, а какая альтернатива? По-мойму очень даже удобно, только пока не пойму, как это работает...

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

В топике я писал, что XML конфигурирую динамически, он не хранится в файле. Конечно можно сохранить XML в файл, а смысл?

Решение в UMI.CMS очень понравилось. Достаточно просто.
 

slach

Новичок
это называется "обработчик схемы"

для PHP4
http://ru2.php.net/manual/en/function.xslt-set-scheme-handlers.php

для php5, делается через Stream Wrappers

http://ru2.php.net/manual/en/function.stream-register-wrapper.php

альтернатива в php5
это PHP Callbacks

см. мой доклад за 2006й год
http://rapidshare.com/files/130108759/phpConf2006.xslt.zip.html
там есть примеры PHPCallback

они более удобны в том плане что позволляют на вход подавать результат Xpath выражений в качестве параметров, которые преобразовываются в php5 объекты нодесетов
и на выходе они тоже отдают набор нод
 

Jenius

Новичок
Автор оригинала: slach
это называется "обработчик схемы"

для PHP4
http://ru2.php.net/manual/en/function.xslt-set-scheme-handlers.php

для php5, делается через Stream Wrappers

http://ru2.php.net/manual/en/function.stream-register-wrapper.php

альтернатива в php5
это PHP Callbacks

см. мой доклад за 2006й год
http://rapidshare.com/files/130108759/phpConf2006.xslt.zip.html
там есть примеры PHPCallback

они более удобны в том плане что позволляют на вход подавать результат Xpath выражений в качестве параметров, которые преобразовываются в php5 объекты нодесетов
и на выходе они тоже отдают набор нод
Спасибо огромное!!!
буду изучать.
 

FB3

Новичок
Автор оригинала: Jenius
За ссылку для общего развития, конечно, спасибо, но я уже там был не раз :)

По поводу udata://content/menu, Вы сказали, что такая реализация не совсем нравится, а какая альтернатива? По-мойму очень даже удобно, только пока не пойму, как это работает...
Вот как раз выше вашего сообщения написали примерно мое мнение.

Автор оригинала: Jenius
"Можно передать с помощью параметра. То есть скачивается нужный файл, сохраняется во временную папку, затем перед запуском транформации передается путь к нему."

В топике я писал, что XML конфигурирую динамически, он не хранится в файле. Конечно можно сохранить XML в файл, а смысл?

Решение в UMI.CMS очень понравилось. Достаточно просто.
Ну проблема же вроде как была в том, что страничка долго закачивается? В любом случае ее нужно закачать, только в моем варианте это будет делаться не во время XSL трансформации, а заранее.
К сожалению, насколько мне известно, в параметре нельзя передать набор нод, а только строку/число.
 

FB3

Новичок
Автор оригинала: Alexandre
FB3 мы о разных параметрах.... лично я думал о
http://www.w3schools.com/XSL/el_param.asp
http://www.citforum.ru/internet/xslt/xslt11.shtml
У них запись одинаковая внутри XSLT.
Только один глобальным является (употребляется как child xsl:stylesheet) и передается снаружи в stylesheet XSLT транформации, и, насколько я знаю, должен быть строкой/числом/callback методом.
А второй - локальный (употребляется как child xsl:template или xsl:function) и тут как раз можно передавать набор нод.

Вообще, надо просто попробовать попередавать снаружи разные переменные и посмотреть, что получится :)
 
Сверху