Показать полную графическую версию : Что еще можно сделать с XML + XSLT + XSL
Страниц :
1
2
[
3]
4
5
6
7
8
9
10
11
12
13
Vlad Drakula
а дизайнер вместо того чтобы верстать HTML шаблоны будет верстать XSLT шаблоны...
Где ж такого умного дизайнера то взять? :search:
ну... вообщето он встроен в PHP по дефолту...
Ясный перец! У пихипишников всегда все по-человечески.
А я пишу в Perl :tomato: Там нужен какой-то связующий модуль с XSLT процессором.
Мне обьяснили (сотрудники службы поддержки) на форуме хостера что нужно писать в саппорт на мыло с веским обоснованием, типа зафиг мне все это.
Интересно как обосновать то, что бы не выглядело личными потребностями, а типа на общих основаниях? :) Типа W3C рекомендует? Или хочу визуализировать как пихипишники? :yahoo:
Vlad Drakula
13-10-2005, 19:30
benya
1) а что ты не можешь ставить свои модули на сервер?
2) на самом деле XSLT не особо сложнее HTML ;)
Vlad Drakula
1)Нет, конечно. У меня же не выделенный сервер ;)
Все ставят сами админы если им надоедать через службу поддержки. К тому же они там сами не плавают в том что такое XSLT и с чем его едят.
2) Спасибо, я заметил.
Vlad Drakula
14-10-2005, 11:58
benya
ну... не знаю... я вот знаю хостеров которые позволяют даже собственный подуль пхп собирать на сервере.
Vlad DrakulaЛюди то разные бывают, такого могут насобирать :o
Vlad Drakula, в связи с тем что доки у нас не в чести, лично привожу выписку о том как это бзать из доки по ПХП
почему же, в чести, вот привожу тот пример из доков только на русском языке:
xslt_process - выполняет XSLT-трансформацию.
Описание:
mixed xslt_process (resource xh, string xml, string xsl [, string result [, array arguments [, array parameters]]])
xslt_process() это краеугольный камень нового расширения XSLT. Она даёт возможность выполнять XSLT-трансформацию с использованием почти всех типов источников ввода. Это делается с помощью буферов аргументов -- концепции, взятой из Sablotron XSLT-процессора (в настоящее время - единственного XSLT-процессора, который поддерживается данным расширением).
Самая простая трансформация функцией xslt_process() - это трансформация XML-файла XSLT-файлом с помещением результата в третий файл, содержащий новый XML (или HTML)-документ. Сделать это с помощью sablotron действительно довольно легко ...
Пример 1. Использование xslt_process() для трансформации XML-файла и
XSL-файла в новый XML-файл
// Разместить новый XSLT-процессор
$xh = xslt_create();
// Обработать документ
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {
print "SUCCESS, sample.xml was transformed by sample.xsl into result.xml";
print ", result.xml has the following contents\n<br>\n";
print "<pre>\n";
readfile('result.xml');
print "</pre>\n";
}
else {
print "Sorry, sample.xml could not be transformed by sample.xsl into";
print " result.xml the reason is that " . xslt_error($xh) . " and the ";
print "error code is " . xslt_errno($xh);
}
xslt_free($xh);
Хотя эта функциональность великолепна, часто, особенно в окружении web, вам понадобится выводить результату напрямую. Следовательно, если вы опустите третий аргумент для функции xslt_process() (или предоставите NULL-значение этого аргумента), она автоматически возвратит значение XSLT-трансформации, вместо записи его в файл ...
Пример 2. Использование xslt_process() для трансформации XML-файла и XSL-файла в переменную, содержащую результирующие XML-данные
// Разместить новый XSLT-процессор
$xh = xslt_create();
// обработать документ, возвращая результат в переменной $result
$result = xslt_process($xh, 'sample.xml', 'sample.xsl');
if ($result) {
print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
print " variable, the \$result variable has the following contents\n<br>\n";
print "<pre>\n";
print $result;
print "</pre>\n";
}
else {
print "Sorry, sample.xml could not be transformed by sample.xsl into";
print " the \$result variable the reason is that " . xslt_error($xh) .
print " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
Это были два простейших случая XSLT-транфсормации, и я могу с уверенностью сказать - самые распространённые случаи, однако иногда вы получаете ваш XML и XSLT-код из внешних источников, таких как БД или сокет. В этих случаях у вас будут XML и/или XSLT-данные в переменной -- и в работающих приложениях перегрузка при дампе их в файл может оказаться значительной. Вместо файлов как аргументов XML и XSLT для xslt_process(), вы можете специфицировать "заглушки документов", которые затем замещаются значениями из массива аргументов (5-й параметр функции xslt_process()). Далее идёт пример процессинга XML и XSLT в результирующую переменную вообще без использования файлов.
Пример 3. Использование xslt_process() для трансформации переменной, содержащей XML-данные, и переменной, содержащей XSL-данные, в переменную, содержащую результирующие XML-данные
// $xml и $xsl содержат XML и XSL-данные
$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);
// разместить новый XSLT-процессор
$xh = xslt_create();
// обработать документ
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
print " variable, the \$result variable has the following contents\n<br>\n";
print "<pre>\n";
print $result;
print "</pre>\n";
}
else {
print "Sorry, sample.xml could not be transformed by sample.xsl into";
print " the \$result variable the reason is that " . xslt_error($xh) .
print " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
Наконец, последний аргумент функции xslt_process() это любые параметры, которые вы хотите передать в XSLT-документ. Можно получить доступ к этим параметрам внутри ваших XSL-файлов с помощью инструкции <xsl:param name="parameter_name">.
ждем приложения ;)
представлю вам веб приложение которое построено по такой технологии
Не дождемся видать приложения. Ок. Есть следующий вопрос!
Имеем хмл файл:
<?xml version="1.0" encoding="windows-1251"?>
<site>
<!-- Новые имена -->
<vi>
<vi_list>
<item>Сюжет рекламного ролика строительной компании «SCHUCO» снимался в рировской студии. Во время съёмок в качестве символа компании использовался беркут. Материал снимался в формате Digital Betacam.
Срок изготовления ролика 8 дней.</item>
</vi_list>
</vi>
<!-- END -->
</site>
В самом тексте тега <item> есть перевод каретки \n перед "Срок изготовления ролика 8 дней."
Так вот вопрос, как же его превратить этот \n в <br/>???
Раньше вопрос решался очень просто - фильтром в скрипте, а теперь как??? Текст, то в HTML одну строчку пойдет...
benya
Насколько я себе представляю, правильный метод в данном случае - использовать внутри тега item XHTML разметку. Т.е. делать все требуемые преобразования на этапе генерации XML. Ну и в схеме xml-файла тогда это как-то надо укзать, если нужна валидация (как - не знаю, ибо никогда не валидировал xml, что в общем-то неправильно).
И самое главное. Задача XSLT - преобразование иерархических XML-документов, а не текста (пусть и "внутри" какого-то тега). Для работы с текстом используются всё те же банальные регэкспы.
Не дождемся видать приложения
benya дракула там в соседней ветке помогает людям фреймы использовать, освободится - тогда....
Vlad Drakula
10-11-2005, 11:55
benya
я думаю что нужно написать нечто вроде этого:
<xsl:template match="item/text()">
<xsl:value-of select="replace(., '\n', '<br/>')" disable-output-escaping="no" />
</xsl:template>
Vlad Drakula
а приложение обещенное когда покажешь?..
Vlad Drakula
А что такое replace(., '\n', '<br/>')? В спецификации я такого не видел. А вообще я уже решил проблему вот этим disable-output-escaping. Думаю мне подойдет. А еще предлагали мне использовать целые огромные куски кода для решения сего. Мне не понравилось и я делаю переводы сразу со скрипта.
E-mail Нафиг они те фреймы, тут технологию нужно так сказать оседлать ;)
Vlad Drakula
11-11-2005, 00:39
E-mail
приложение обещенное когда покажешь?..
времени нету запустить в свет! но скоро вы его все увидете!
benya
А что такое replace(., '\n', '<br/>')? В спецификации я такого не видел.
это есть в спецификации XSLT 2.0
Vlad Drakula
скоро это когда? когда на пенсию выйдешь?:)
уже второй месяц идет, еще несколько таких месяцев и ты в гробу будешь;)
поспеши с приложением!
в гробу отдохнешь, ты там вечность целую лежать будешь:)
Господа, есть следующий XML документ:
<?xml version="1.0" encoding="windows-1251"?>
<site>
<tours>
<podname>Название</podname>
<opis>Описание1</opis>
</tours>
<tours>
<podname>Название2</podname>
<opis>Описание2</opis>
</tours>
...
</site>
Нужно сделать список название/описание, а сверху страницы только названия, которые будут ссылками-якорями на
соответствующие элементы списка.
Типа так:
Название
Название1
Название2
Название
Описание
Название1
Описание1
Название2
Описание2
И так далее... Как с помощью XSLT это можно сделать? Я написал 2 шаблонных правила, а поскольку информация
извлекается из одного и того же места правила переопределяют друг друга. Как бороться?
Vlad Drakula
01-12-2005, 00:29
benya
нузно использовать именованные шаблоный с параметрами + разные моды преобразования
Кстати, а с какой версией XSLT работает LibXSLT??? Что-то я обнаружил что...1.0. (Sablotron вроде тоже.) Зачем же тогда спецификация 1.1 не говоря уже про 2.0 если её ничто не поддерживает?
Vlad Drakula
02-12-2005, 23:56
benya
2,0 есть в саксоне...
Saxon работает под win32 (?). На самом деле мне у своего хостера не удалось даже установить LibXML, не говоря уже о LibXSLT. Они в каком-то диком ужасе от этих модулей.
Как-то все оно медленно распространяется... Никому оказывается это не нужно. Я уже так привык в "деревьях" ковыряться..
Бред какой-то.
Vlad Drakula
03-12-2005, 11:37
benya
саксон работает под явой, так что он есть под всеми операционками...
benya
дело в том что людей хорошо владеющих XSLT очень мало... а тех кто может вытворить на нем все что еще мало...
но если не умело им пользоваться можно вогнать сервер в такой ступор...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.