Войти

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


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

Vlad Drakula
02-10-2005, 10:48
в связи с тем что доки у нас не в чести, лично привожу выписку о том как это бзать из доки по ПХП

The simplest type of transformation with the xslt_process() function is the transformation of an XML file with an XSLT file, placing the result in a third file containing the new XML (or HTML) document. Doing this with sablotron is really quite easy...

Пример 1. Using the xslt_process() to transform an XML file and a XSL file to a new XML file




<?php

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
if (xslt_process($xh, 'sample.xml', 'sample.xsl', 'result.xml')) {
echo "SUCCESS, sample.xml was transformed by sample.xsl into result.xml";
echo ", result.xml has the following contents\n<br />\n";
echo "<pre>\n";
readfile('result.xml');
echo "</pre>\n";
} else {
echo "Sorry, sample.xml could not be transformed by sample.xsl into";
echo " result.xml the reason is that " . xslt_error($xh) . " and the ";
echo "error code is " . xslt_errno($xh);
}

xslt_free($xh);

?>




While this functionality is great, many times, especially in a web environment, you want to be able to print out your results directly. Therefore, if you omit the third argument to the xslt_process() function (or provide a NULL value for the argument), it will automatically return the value of the XSLT transformation, instead of writing it to a file...

Пример 2. Using the xslt_process() to transform an XML file and a XSL file to a variable containing the resulting XML data




<?php

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document, returning the result into the $result variable
$result = xslt_process($xh, 'sample.xml', 'sample.xsl');
if ($result) {
echo "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
echo " variable, the \$result variable has the following contents\n<br />\n";
echo "<pre>\n";
echo $result;
echo "</pre>\n";
} else {
echo "Sorry, sample.xml could not be transformed by sample.xsl into";
echo " the \$result variable the reason is that " . xslt_error($xh);
echo " and the error code is " . xslt_errno($xh);
}

xslt_free($xh);

?>





The above two cases are the two simplest cases there are when it comes to XSLT transformation and I'd dare say that they are the most common cases, however, sometimes you get your XML and XSLT code from external sources, such as a database or a socket. In these cases you'll have the XML and/or XSLT data in a variable -- and in production applications the overhead of dumping these to file may be too much. This is where XSLT's "argument" syntax, comes to the rescue. Instead of files as the XML and XSLT arguments to the xslt_process() function, you can specify "argument place holders" which are then substituted by values given in the arguments array (5th parameter to the xslt_process() function). The following is an example of processing XML and XSLT into a result variable without the use of files at all.

Пример 3. Using the xslt_process() to transform a variable containing XML data and a variable containing XSL data into a variable containing the resulting XML data




<?php
// $xml and $xsl contain the XML and XSL data

$arguments = array(
'/_xml' => $xml,
'/_xsl' => $xsl
);

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
echo "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
echo " variable, the \$result variable has the following contents\n<br />\n";
echo "<pre>\n";
echo $result;
echo "</pre>\n";
} else {
echo "Sorry, sample.xml could not be transformed by sample.xsl into";
echo " the \$result variable the reason is that " . xslt_error($xh) .
echo " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>





Finally, the last argument to the xslt_process() function represents an array for any top-level parameters that you want to pass to the XSLT document. These parameters can then be accessed within your XSL files using the <xsl:param name="parameter_name"> instruction. The parameters must be UTF-8 encoded and their values will be interpreted as strings by the Sablotron processor. In other words - you cannot pass node-sets as parameters to the XSLT document.

Vlad Drakula
02-10-2005, 10:49
а это код движка шаблонов с использованием XSLT



function xml2html($XML, $debug = 0)
{
$XSL = implode ('', file('./xslt/top100.xslt'));

$arguments = array('/_xml' => $XML,'/_xsl' => $XSL);

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
$HTML = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if($debug)
{
header('Content-type: application/xml');
print $XML;
}
else
{
if ($HTML)
{
echo str_replace('&amp;', '&', $HTML);
}
else
{
echo " Sorry, sample.xml could not be transformed by sample.xsl into";
echo " the \$XML variable the reason is that " . xslt_error($xh);
echo " and the error code is " . xslt_errno($xh);
}
}
xslt_free($xh);
}

benya
03-10-2005, 18:01
Так что выполняет эти преобразования, браузер или некий текстовый "просессор"?

Vlad Drakula
04-10-2005, 00:04
benya
и то и другое может это делать.

E-mail
04-10-2005, 04:06
benya я бы сказал гипертекстовый :)

Vlad Drakula
04-10-2005, 11:41
E-mail
1. а что это за элементы?
2. откуда беруться @href и @txt
3. насколько я понял это талица стиля, но если ее открыть IE 6 то ничего не видно, можно пример связывающий мой пример полной работы с данными используя эти технологии? ну просто чтобы всем наглядно было и понятно как это работает..
не путайте XSLT и CSS
XSLT это не таблица стилей это шаблонное преобразование "дома"!

benya
04-10-2005, 13:54
Господа, а кто подскажет нормальный XSLT парсер для PERL. Нашел Sablotron, да вот не нравится он мне совсем и установка его тоже ;)

Greyman
05-10-2005, 17:24
Не знаю точно куда бросить: в Программирование, Вэбмастеру или вообще во Флейм. Пока кидаю в Вэбмастеру, далее модеры решат...

Тут давеча искал в инете фигню всякую, дык наткнулся на такой ресурс:
Глоссарий по стандартам платформы XML (http://libweb.rsl.ru/resource/docs/xml/intro2.ru.html)Целью предлагаемой работы является систематизация терминологии стандартов активно развиваемой в последние годы консорциумом W3C новой технологической платформы Web, основанной на расширяемом языке разметки XML. Сложности здесь заключаются не только в большом объеме сложным образом взаимосвязанных документов, определяющих указанные стандарты, но и в том, что русскоязычная терминология в этой области лишь начинает формироваться и охватывает пока, главным образом, только собственно стандарт XML. Между тем, функциональность Web нового поколения определяется всем комплексом стандартов платформы XML, многие из которых уже начинают активно использоваться на практике. В связи с этим, формирование русскоязычной терминологии стандартов XML-платформы представляется нам актуальным и важным делом.
Предлагаемая версия глоссария значительно отличается от первой его версии, опубликованной 28.06.2000. В нее дополнительно включена терминология важных стандартов XSL и XSLT, уточнены материалы, заимствованные из предыдущей версии, исправлены замеченные погрешности. Думаю лишним не будет...

benya
11-10-2005, 12:12
Ну, со статическими простыми документами более менее понятно - взяли XML документ и с XSL документом протянули через "процессор" и на выходе получили то, что надо.
Но вот как обрабатываются страницы с динамическим контентом, где происходит выборка из базы данных итд.? Это не совсем понятно.
Как обрабатываются типичные сайты у которых есть к примеру слева : Меню,поиск, баннера. Справа: анонсы, колонка новостей.
Чего генерить то? Все генерим в XML, а в самом конце прямо с ходу обрабатываем?
Делать один XSL шаблон или с маленькими подшаблончиками, и как-то их туда подключаем?
Опять же возвращаясь к разделяемости дизайна от программной части. Встраивать "теги" XML в скрипт можно? Это уже ведь не дизайн ;) Или чем-то тоже XML спецефическим генерить?

Vlad Drakula
11-10-2005, 12:32
benya
1) разрабатываешь концепцию веб приложения и его структуру
2) разрабатываешь дом модель
3) генеришь XML с сответствующим домом
4) преобразовываешь его в посошью соответствующего XSLT преобразования.

XSLT файл это не шаблон! это преобразование! которое можен содержать много шаблонов!

benya
11-10-2005, 15:44
1) А что Вы скажете о скорости работы сайта с приминением таких технологий? Ведь по сути мы имеем 2 обработки (?) Первая генерация XML , а потом еще одна, которая и выводит HTML.
Сайт с вшитым HTML работать то быстрее будет?? И даже eval 2 раза тоже №)) Или нет? ;)

2)В чьи обязанности входит ковыряться в этих самых XSL файлах? Программиста или дизанера?? Мол, я вывел вам все необходимые данные, а вы "визуализируйте" ;)

Vlad Drakula
11-10-2005, 19:24
benya
1)
если программер проффи то по скорости вшитый намертво дизайн не обогнать...
по моим представлениям евал будет меддленнее т.к. к нему не применяется оптимизация и кеширование.

2)
есть такая профессия XSLT верстальщик...

benya
12-10-2005, 17:11
to: Vlad Drakula
1)Ну если XSL не шаблон, то по крайней мере очень на него похож, только вот... с логическими структурами.
2)Нет, тут даже не 2 прохода, а 3 (!). Генерация XML, потом проход черех XSLT процессор, а только потом принт.
Для сравнения с вшитым дизайном - генерация и вывод происходят одновременно, тоесть сразу (!). Выгода налицо. :read:

Ок. Скажите мне тогда,господа, те кто вопил про "порочность" вшитого дизайна : Что будет легче менять дизайн в кодах или рыться в XSL файлах?
Там ведь и логика и переменные, даже циклы с сортировкой, не дай Бог что потерять :search:
И возвращаясь (извините за занудство) опять к тому магазину, любой сотрудник поправит дизайн или уже при любых телодвижениях придется обращатся не к программисту, а к... XSLT верстальщику? :tease:

Vlad Drakula
12-10-2005, 22:04
benya
XSLT проще чем пхп + изменять набора шаблонов на много проще чем изменять обработку запросов из базы...
к томуже это позваляет производить реюзин шаблонов на разных страницах + позволяет производить быструю смену дизайна + иметь несколько скинов.. и т.д....

E-mail
12-10-2005, 23:41
Vlad Drakula
приведи пожалст код

sample.xml и sample.xsl для полноты обзора

mar
13-10-2005, 00:58
мдя. По поводу вшитого дизайна - остаюсь при своем. При таком подходе, как описывает Влад, benya получается кругом прав. Что-то тут порочно-многоступенчатое получается (что имхо не менее порочно, чем одноступенчатый вариант :ninja: )
Vlad Drakula
- ты можешь действительно привести пример, из которого бы было ясно who is где. (в смысле где чья работа?) Или у вас просто супер-мега-монстр-фирма, создающая супер-мега-приложения и имеющая супер-мега деньги за которые держит конвейр с армией разработчиков-кодеров-верстальщиков-дизайнеров и, соответственно, в случае изменения чего-то там все эти муравьи несутся с соломинками на свои рабочие места?
- Сайты, которые вы делаете люди потом сами поддерживают, или они остаются навечно в вашем саппорте от бд до дизайна? Если первое, вопрос пержний, что происходит, когда люди хотят что-то изменить? Если второе, то даже microsoft предаставляет народу некоторую свободу действий в виде API или реестра :sorry:
(ты извини, я специально утрирую, просто понять хочу, что в мире происходит :))

Vlad Drakula
13-10-2005, 10:33
mar
При таком подходе, как описывает Влад, benya получается кругом прав. Что-то тут порочно-многоступенчатое получается (что имхо не менее порочно, чем одноступенчатый вариант )
benya говорит о чистой теории... без практики... на практике все не очень то так...

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

XSLT нужно применять в место евалов(веть именно так сделано большенство шаблонов в современных форумах) для применения шаблонов...

benya
13-10-2005, 14:54
Vlad Drakula
говорит о чистой теории... без практики...

1) Ну, не в 3 раза. Просто там 3 ступени. Теоретически 3 (а может быть еще что то типа переливания из пустого в порожнее. Там получить результат HTML или XML в переменную. Чем не еще одна ступень?). Может быть XSLT процессор и работает быстро, возможно в несколько раз быстрее чем какой-то Перловский модуль на регулярках (или евалах : кому как нравится ;)).



веть именно так сделано большенство шаблонов в современных форумах
2) Не поэтому ли эти форумы такие тяжелые?
А разве не вы писали в каких-то ветках форума что форумы типа phpbb используют eval? $)

XSLT проще чем пхп
3) Мол, если не знаешь - лучше это не трогать? ;) см. п. 4



я предоставляю информауию, а как ее отобразить решают они мами...
4) Здесь преимущества (удобства) и мне очевидны.
Вот Вам "правила визуализации", Вы можете сами прикрутить любой дизайн быстро и легко, а можете несколько дизайнов сразу да еще с несколькими языками.
С оговоркой. Если Вы сами этого сделать не можете, наша компания за "небольшие" деньги готова за Вас эту работу сделать. ;)



P.S. У своего хостера вообще я не видел упоминания о XSLT. Видимо массового паломничества на эту технологи не наблюдается. Будем "клянчить" ;)

Vlad Drakula
13-10-2005, 16:24
benya
А разве не вы писали в каких-то ветках форума что форумы типа phpbb используют eval? $)
как раз из-за евала они и тяжолые...
я не видел форумов с использованием XSLT

P.S. У своего хостера вообще я не видел упоминания о XSLT. Видимо массового паломничества на эту технологи не наблюдается. Будем "клянчить"
ну... вообщето он встроен в PHP по дефолту...

Мол, если не знаешь - лучше это не трогать?
дело в том что на стадии верстки макета сайта, разработчик может предоставить несколько тестовых XML файлов, а дизайнер вместо того чтобы верстать HTML шаблоны будет верстать XSLT шаблоны...
как можно заметить скорость работы и возможности ее распаралелить на много возрастают!

mar
13-10-2005, 16:42
Vlad Drakula
уже понятней :)
(кстати, не знаю, как в шаблонах, реализованных для стандартных форумов, а вообще в классах шаблонов под PHP eval используется далеко не всегда. Насколько мне помнится, этого нет ни в phplib, ни в fasttemplate.)




© OSzone.net 2001-2012