Войти

Показать полную графическую версию : Что еще можно сделать с XML + XSLT + XSL


Страниц : 1 2 [3] 4 5 6 7 8 9 10 11 12 13

benya
13-10-2005, 18:29
Vlad Drakula
а дизайнер вместо того чтобы верстать HTML шаблоны будет верстать XSLT шаблоны...

Где ж такого умного дизайнера то взять? :search:

ну... вообщето он встроен в PHP по дефолту...
Ясный перец! У пихипишников всегда все по-человечески.
А я пишу в Perl :tomato: Там нужен какой-то связующий модуль с XSLT процессором.
Мне обьяснили (сотрудники службы поддержки) на форуме хостера что нужно писать в саппорт на мыло с веским обоснованием, типа зафиг мне все это.
Интересно как обосновать то, что бы не выглядело личными потребностями, а типа на общих основаниях? :) Типа W3C рекомендует? Или хочу визуализировать как пихипишники? :yahoo:

Vlad Drakula
13-10-2005, 19:30
benya
1) а что ты не можешь ставить свои модули на сервер?
2) на самом деле XSLT не особо сложнее HTML ;)

benya
14-10-2005, 11:41
Vlad Drakula
1)Нет, конечно. У меня же не выделенный сервер ;)
Все ставят сами админы если им надоедать через службу поддержки. К тому же они там сами не плавают в том что такое XSLT и с чем его едят.
2) Спасибо, я заметил.

Vlad Drakula
14-10-2005, 11:58
benya
ну... не знаю... я вот знаю хостеров которые позволяют даже собственный подуль пхп собирать на сервере.

benya
14-10-2005, 12:19
Vlad DrakulaЛюди то разные бывают, такого могут насобирать :o

E-mail
15-10-2005, 19:56
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">.


ждем приложения ;)

представлю вам веб приложение которое построено по такой технологии

benya
31-10-2005, 12:59
Не дождемся видать приложения. Ок. Есть следующий вопрос!
Имеем хмл файл:
<?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 одну строчку пойдет...

ivank
31-10-2005, 19:35
benya
Насколько я себе представляю, правильный метод в данном случае - использовать внутри тега item XHTML разметку. Т.е. делать все требуемые преобразования на этапе генерации XML. Ну и в схеме xml-файла тогда это как-то надо укзать, если нужна валидация (как - не знаю, ибо никогда не валидировал xml, что в общем-то неправильно).

И самое главное. Задача XSLT - преобразование иерархических XML-документов, а не текста (пусть и "внутри" какого-то тега). Для работы с текстом используются всё те же банальные регэкспы.

E-mail
10-11-2005, 06:46
Не дождемся видать приложения
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>

E-mail
10-11-2005, 21:15
Vlad Drakula

а приложение обещенное когда покажешь?..

benya
10-11-2005, 22:37
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

E-mail
12-11-2005, 00:01
Vlad Drakula
скоро это когда? когда на пенсию выйдешь?:)
уже второй месяц идет, еще несколько таких месяцев и ты в гробу будешь;)

поспеши с приложением!

в гробу отдохнешь, ты там вечность целую лежать будешь:)

benya
29-11-2005, 21:55
Господа, есть следующий 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
нузно использовать именованные шаблоный с параметрами + разные моды преобразования

benya
02-12-2005, 20:12
Кстати, а с какой версией XSLT работает LibXSLT??? Что-то я обнаружил что...1.0. (Sablotron вроде тоже.) Зачем же тогда спецификация 1.1 не говоря уже про 2.0 если её ничто не поддерживает?

Vlad Drakula
02-12-2005, 23:56
benya
2,0 есть в саксоне...

benya
03-12-2005, 10:59
Saxon работает под win32 (?). На самом деле мне у своего хостера не удалось даже установить LibXML, не говоря уже о LibXSLT. Они в каком-то диком ужасе от этих модулей.
Как-то все оно медленно распространяется... Никому оказывается это не нужно. Я уже так привык в "деревьях" ковыряться..
Бред какой-то.

Vlad Drakula
03-12-2005, 11:37
benya
саксон работает под явой, так что он есть под всеми операционками...

benya
дело в том что людей хорошо владеющих XSLT очень мало... а тех кто может вытворить на нем все что еще мало...
но если не умело им пользоваться можно вогнать сервер в такой ступор...




© OSzone.net 2001-2012