Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

постраничная разборка xml

333
02 июня 2007 года
GHopper
200 / / 28.12.2004
Здраствуйте!
Есть задача - разместить на страници товары из некоторого xml-файла. Использую xlst-преобразования и получаю на выходе табличку со всеми товарами. Вопрос - как одним запросом извлечь определенное количество записей из xml-файла, а не все записи сразу? Как передавать параметры xlst-процессору, чтобы можно было одним xsl-файлом выбирать товары с различными значениями атрибута.
239
02 июня 2007 года
Dolonet
1.7K / / 20.05.2000
http://www.w3.org/TR/xslt
333
02 июня 2007 года
GHopper
200 / / 28.12.2004
читал... не помогло. Я разобрался с технологией, создал сложное преобразование... но вот как выбрать часть записей не могу додуматься. Поможите кто может
337
02 июня 2007 года
shine
719 / / 09.06.2006
Решение влоб: берешь и в for-each весь вывод строк фильтруешь с помощью функции position(). Эта функция возвращает порядковый номер текущей итерации. То есть добавив что-то типа <xsl:if test="position()<11">вывод строки</xsl:if> получишь первые 10 строк своего списка.
12
02 июня 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: GHopper
Здраствуйте!
Есть задача - разместить на страници товары из некоторого xml-файла. Использую xlst-преобразования и получаю на выходе табличку со всеми товарами. Вопрос - как одним запросом извлечь определенное количество записей из xml-файла, а не все записи сразу? Как передавать параметры xlst-процессору, чтобы можно было одним xsl-файлом выбирать товары с различными значениями атрибута.


А ты думал, что увидят те пользователи, к которых браузер не поддерживает XSLT?
Лично я для похожей задачи (http://alekciy.ru/freelance/IIImeJIb/index.php?menu=price) решил генерить для клиента HTML без всяких XSLT.
Ипользуя DOM функции из PHP5 + возможность работы с XPath я вот из этого: http://alekciy.ru/freelance/IIImeJIb/price.xml и получаю то, что видишь в первом линке.

333
03 июня 2007 года
GHopper
200 / / 28.12.2004
<xsl:if test="position()<11">вывод строки</xsl:if>
как один из вариантов! работает. Только вот как теперь передать парамерты в xslt-процессору, чтобы позиция в одном случае была меньше 11, а в другом больше 11-22. Не заводить ведь для каждой страници отдельный xsl-файл?

"А ты думал, что увидят те пользователи, к которых браузер не поддерживает XSLT?" - я тоже генерирую для клиентов html без всяких xslt. Просто у меня XSLT занимается той самой генерацией html-файла, а не огномная процедура на DOM+XPath+PHP. Попробуй сам - у этой технологии есть право на жизнь.
337
03 июня 2007 года
shine
719 / / 09.06.2006
Цитата: GHopper
Только вот как теперь передать парамерты в xslt-процессору, чтобы позиция в одном случае была меньше 11, а в другом больше 11-22. Не заводить ведь для каждой страници отдельный xsl-файл?


Конечно все нужно делать в одном файле. Есть возможность передавать в xslt-процессор параметры. В php5 это выглядит так:

 
Код:
$proc = new XsltProcessor();
$proc->registerPhpFunctions();
   
$proc->importStylesheet($xsl);  

$proc->setParameter('', 'conference', $conf_id);
   
$result = $proc->transformToXML($inputdom);

Тогда потом в xsl-скрипте можно объявить эти значения как аргументы и использовать как обычные переменные(xsl:variable):
[HTML]
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="conference"/>
........
<xsl:value-of select="$conference"/>
[/HTML]
Ты можешь передавать в качестве таких параметров номер первой и последней записи которые хочешь выводить пользователю и использовать эти номера в фильтре при выводе записей.
12
03 июня 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: GHopper
Просто у меня XSLT занимается той самой генерацией html-файла, а не огномная процедура на DOM+XPath+PHP. Попробуй сам - у этой технологии есть право на жизнь.



А кто спорит? А насчет огромной процедуры... ну это уже как ты сам напишешь...

333
03 июня 2007 года
GHopper
200 / / 28.12.2004
Всем огромное спасибо! Помогли, проблема решена.
Для потомков:
#index.php
$xml = new DOMDocument('1.0', 'windows-1251');
$xsl_proc = new XSLTProcessor();
$xsl = new DOMDocument('1.0', 'windows-1251');
$xsl_proc->registerPhpFunctions();
$xsl_proc->setParameter('', 'begin', 1);
$xsl_proc->setParameter('', 'end', 25);
$xml->load('test_main.xml');
$xsl->load('test_main.xsl');

$xsl_proc->importStyleSheet($xsl);
echo $xsl_proc->transformToXML($xml);

#test_main.xsl
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method="html" encoding="windows-1251" indent="no"/>
<xsl:param name="begin"/>
<xsl:param name="end"/>
...
<xsl:if test="(position() &gt; $begin) and (position() &lt; $end)">
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог