Использование XML/XSLT без Sablotron

Serguitar

Новичок->продвинутый
Использование XML/XSLT без Sablotron

Начал более глубокое изучение XML/XSLT, сразу куча вопросов.
1. Как выводить после преобразования XML->XSLT полученый HTML код, а не исходный XML-код документа?
В test.xsl пишу <xsl:eek:utput method="html" indent="yes"/> Всё равно показывает исходный xml.
И второй вопрос - на яндекс.маркете создается впечатление, что все страницы представляют собой xml документы, пропущенные через XSLT шаблон (думаю, так оно и есть). А как с помощью XSLT шаблона отсортировать XML документ по полученной из ГЕТ переменной? Как вообще XSLT работает с GET/POST?
Заранее спасибо всем.
 

MD

Guest
1. странный вопрос, в любом примере, по-моему это есть.
// php 5
$DOMdoc = new DOMDocument();
$xsl = new XSLTProcessor();
$DOMdoc->load('test.xsl');
$xsl->importStyleSheet($DOMdoc);
$DOMdoc->load('test.xml');

header('Content-type: text/html; charset=UTF-8');
print($xsl->transformToXML($DOMdoc));
2. XSL не работает с GET/POST, но только с данными которые ты ему скормишь. надеюсь понятно, что источником данных может быть что-угодно, будь то гет/пост/дб/етц..

-~{}~ 21.04.06 09:50:

к 1. в шаблоне стоит еще вот это: <xsl:eek:utput method="html" encoding="UTF-8" indent="no"/>
 

Serguitar

Новичок->продвинутый
MD
Ты не понял. Ничего странного в вопросе нет.
Возможно ли взаимодействие XML/XSLT без вмешательства PHP?
Как сделано на Яндекс.Маркете?
 

Raziel[SD]

untitled00
Serguitar
Так или иначе тебе придется в "XSLT-движок" передавать XML/XSLT-шаблон, а как именно это уже неважно, при помощи PHP или чего-то другого это уже твое личное дело :).
 

MD

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

dub

Новичок
Автор оригинала: Serguitar
Ты не понял. Ничего странного в вопросе нет.
Возможно ли взаимодействие XML/XSLT без вмешательства PHP?
Как сделано на Яндекс.Маркете?
Запросто используй кокон к примеру.
http://cocoon.apache.org/
Если есть возможность конечно.
под него и cms есть.
http://lenya.apache.org/
или что то подобное.
Опять таки все зависить от задач и маштабов проекта.
 

Alexandre

PHPПенсионер
Ты не понял. Ничего странного в вопросе нет.
Serguitar как объяснил, так и ответили

Возможно ли взаимодействие XML/XSLT без вмешательства PHP?
можно, например в шеле написать:
xsltproc --output ${HTMFILE} ${XSLFILE} ${XMLFILE}
Данный шел по крону будет тащить информацию с Яндекс.Маркета, преобразовывать ее в HTML. Сервер будет отдавать только чистый HTML, меньше нагрузка на сервер, на канал и процессор (это при каждом запросе юзера - надо тащить XSLFILE с Яндекс.Маркета, преобразовывать... кошмар какой-то для сервера. И ни какого РНР)
Как сделано на Яндекс.Маркете?
А как сделано на Яндекс.Маркете?
 

dub

Новичок
есть еще такая штука.
http://www.popoon.org/
но в этом я пока еще не разберался.
 

Serguitar

Новичок->продвинутый
Raziel[SD]
Так или иначе тебе придется в "XSLT-движок" передавать XML/XSLT-шаблон, а как именно это уже неважно, при помощи PHP или чего-то другого это уже твое личное дело
Во многих браузерах (кроме Оперы) есть встроеные достаточно мощные средства для самостоятельного преобразования XML документа в HTML код при помощи подгруженного XSLT шаблона. Без всякого PHP или чего бы то ни было ещё. Браузер сам всё делает.
MD
ну хм ... мне всегда казалось что для трансформации, нужен XSLT процессор, который запустит эту трансформацию. в свою очередь, что-то должно запустить этот процессор.
на яндекс маркете я не вижу доказательств, что у них получилось обойтись без процессора
ДА, так ведь есть встроенный XSLT процессор и в IE, и в FF, и в NN.
Я ошибаюсь?
А что ты видишь на Яндекс.Маркете? Я вижу ссылки на .xml документы, которые сортируют XML данные в зависимости от полученной из GET переменной.
dub
Спасибо, посмотрю.
Alexandre
Санёк, если нечего написать "в тему", то пройди мимо. Задаваемые тобой на форуме вопросы ещё раз доказывают, что обычно ты ищешь именно такие пути решения.
 

MD

Guest
Serguitar
встроенные есть, но пока я не видел ни одного сайта, который бы ими пользовался.

а на яндекс.маркете я вижу ссылки на файлы xml, которые внутри могут быть любым членом из семейства php, asp, perl, c ... и т.д.
 

Serguitar

Новичок->продвинутый
MD
ТОгда зачем .xml? Почему на других сервисах они старательно прячут расширение?
Ладно, я сам себе уже надоел:
Значит нельзя разработать ресурс так, чтобы он работал ТОЛЬКО с помощью XML/XSLT преобразований? Обязательно нужен какой-то XSLT процессор, который будет преобразовывать XML данные и выводить их на основе XSLT шаблона, я правильно понимаю? И на Яндекс.Маркете сделано именно так?
 

andyjam

Новичок
тьху.
так и не ответили человеку.

Serguitar, ответ на твой вопрос: делать xslt без пхп - можно. используя парсер, встроенный в некоторые браузеры (например MS XML Parser/MSIE).

суть сводится к следующему: в начале xml-я указываешь путь к xsl-шаблону, примерно так:

<?xml version="1.0" encoding="windows-1251" ?>
<?xml-stylesheet href="xsl/index.xsl" type="text/xsl" ?>

после чего твой xml нормальненько хавается....

проблема здесь одна:
не во все браузеры встроены парсеры. потому если хочешь заниматься подобными вещами придется тебе хавать $_SERVER["USER_AGENT"] и в зависимости от него либо отдавать отдельно xml и отдельно xsl, либо все таки пережевывать саблотроном/чем-то еще...

насчет яндекс-маркета и вообще: реально такую схему сейчас никто не использует (насколько я знаю), т.е. у всех трансформация происходит на стороне сервера. однако, ИМХО, вышеописанная идея имеет место быть [!].
 

Serguitar

Новичок->продвинутый
andyjam
<?xml version="1.0" encoding="windows-1251" ?>
<?xml-stylesheet href="xsl/index.xsl" type="text/xsl" ?>
Спасибо тебе за отклик, но что это возможно я уже знаю, экспериментировал по всякому с вариантами вывода.
Сложность лишь в том как получить GET переменную в XSLT и уже относительно неё отсортирвоать данные.
Раз это невозможно - идея глохнет на корню. Так как просто вывод никому не нужен.
 

andyjam

Новичок
Автор оригинала: Serguitar
andyjam

Спасибо тебе за отклик, но что это возможно я уже знаю, экспериментировал по всякому с вариантами вывода.
Сложность лишь в том как получить GET переменную в XSLT и уже относительно неё отсортирвоать данные.
Раз это невозможно - идея глохнет на корню. Так как просто вывод никому не нужен.
ну как так невозможно?? если б было невозможно - нафиг тот xsl нужен :).

предложу один вариант. возможно ты (или кто-то другой) предложит лучше.

лично я пользуюсь libxslt. там при вызове $xsl->process() можно передать аргументом ассоциативный массив, который будет доступен в xsl файле (и который можно использовать как <xsl:value-of select="$var"/>).

(но учти, этот метод - доступен только в пхпшном libxslt)
 

Raziel[SD]

untitled00
Serguitar
Во многих браузерах (кроме Оперы) есть встроеные достаточно мощные средства для самостоятельного преобразования XML документа в HTML код при помощи подгруженного XSLT шаблона. Без всякого PHP или чего бы то ни было ещё. Браузер сам всё делает.
Дальше теории такой вариант не идет, рекомендую попровать сделать такой сайт :) вот когда во всех браузерах будет встроеный XSLT-процессор, тогда и будет смысл о нем говорить, хотя один раз мне пришлось им воспользоваться в админке :)
 

slach

Новичок
встроенный XSLT процессор есть
FF1+, MSIE5+,Opera9+
оно ЕСТЬ
оно РАБОТАЕТ, хотя и не без глюков
и нифига не кроссплатформенно

это раз

в принципе НИЧЕГО не мешает
1) сначала подгрузить
HTML в котором скажем через hidden поля в форме или через javascript переменные проставлены "параметры" + JS библиотеку в котором реализована функциональность XSLT транфсформации на клиенте, можно даже данные XML внутри XHTML Документа спокойно себе держать

2) ВНИМАНИЕ, важно, в XSLT шаблон НА КЛИЕНТЕ, можно передавать параметры, из клиентского пространства!
см. например XSLTProcessor (Mozilla и Opera)
http://developer.mozilla.org/en/docs/XSLTProcessor
http://developer.mozilla.org/en/docs/The_XSLT/JavaScript_Interface_in_Gecko:Setting_Parameters

под MSIE сходу в MDSN прямой ссылки не нашел
но искать надо в направлении IXSLProcessor addParameter
дам только кусок кода

var xslt = new ActiveXObject("Msxml2.XSLTemplate.4.0");
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.4.0");
var xslProc;
xslDoc.async = false;
xslDoc.load("sample.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc.async = false;
xmlDoc.load("books.xml");
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;
xslProc.addParameter("param1", "Hello");
xslProc.transform();
alert(xslProc.output);


3) и На последок, реализация клиентской XSLT трансформации указанным выше способо на текущий момент IMHO жуткий изврат не стоящий своих усилий... но сделать можно, другое дело что ЗАЧЕМ ? если юзеру в 99% случаев хватает обычного gzipped HTML ? экономия на объеме перегоняемых на самом деле мифическая ;) но лично я знаю людей которые делали PURE XML\XSLT сайты с клиентской трансформацией на стороне MSIE5+, правда внятно объяснить ЗАЧЕМ они это делали, они мне не смогли
 

andyjam

Новичок
согласен, это изврат.
я потому и предложил вариант, основанный на анализе USER_AGENT.
а преимущество здесь очень простое: разгрузка сервера. в частности, я думаю, более чем в 50% запросов серверу не придется делать трансформаию.
 
Сверху