Показать полную графическую версию : Что еще можно сделать с XML + XSLT + XSL
Страниц :
1
2
3
[
4]
5
6
7
8
9
10
11
12
13
На самом деле в ступор сервер можно вогнать чем угодно. Взять image-magick и сутками крутить по кругу фото 10 мегапикселей. Это и так ясно. Но мне ответили что никому кроме меня это не нужно из более 3000 клиентов. А может и просто не захотели возиться с модулями, так как там добрый десяток зависимостей модулей и столько ж пакетов. Досадно как.
Vlad Drakula
03-12-2005, 12:00
benya
ну...
вроде это не сложно устанавливать...
On Unix, run configure with the --enable-xslt --with-xslt-sablot options. The Sablotron library should be installed somewhere your compiler can find it.
Make sure you have the same libraries linked to the Sablotron library as those, which are linked with PHP. The configuration options: --with-expat-dir=DIR --with-iconv-dir=DIR are there to help you specify them. When asking for support, always mention these directives, and whether there are other versions of those libraries installed on your system somewhere. Naturally, provide all the version numbers.
сейчас есть хостеры которые все это готовы поставить... просто надо поискать...
Vlad Drakula
2,0 есть в саксоне...
а можно более официальное название =) не дошло - что это? :)
Кстати вопрос - кто-нибудь использовал XML/XSL шаблоны под PHP? Что о них можно сказать? Чем парсится? Я имею в виду ситуацию, типа следующей (нагло содрано из книги :)) :
....
<!--- дальше идет блок повторяющихся данных, берущихся из базы --->
<xsl:for-each select="people/person">
<tr>
<td><xsl:value-of select="name/></td>
<td><xsl:value-of select="email/></td>
</tr>
</xsl:for-each>
....
вот, собственно, кто будет это парсить? (т.е. где вызывается запрос к базе и крутится, наполняясь этот шаблон столько раз, сколько нужно?
Еще два вопроса: насколько удобно использование таких шаблонов
- по скорости (особенно здорово было бы в сравнении с FastTemplate и php-templates).
- По удобству (для программиста) (по сравнению с шаблонами, используищие принцип парсинья блоков и переменных, вроде того, что тут (специально делаю пример, аналогичный предыдущему):
<!--- дальше идет блок повторяющихся данных, берущихся из базы --->
<!-- BEGIN row_box -->
<tr>
<td>{name}</td>
<td>{email}</td>
</tr>
<!-- END row_box -->
пока все, еще подумаю, еще спрошу =)
Vlad Drakula
03-12-2005, 12:47
mar
а можно более официальное название не дошло - что это?
Saxon
Кстати вопрос - кто-нибудь использовал XML/XSL шаблоны под PHP?
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('&', '&', $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);
}
Еще два вопроса: насколько удобно использование таких шаблонов
- по скорости (особенно здорово было бы в сравнении с FastTemplate и php-templates).
- По удобству (для программиста) (по сравнению с шаблонами, используищие принцип парсинья блоков и переменных, вроде того, что тут:
Код:
1) т.к. я очень хорошо изучил XSLT то для меня очень удобно
2) XSLT это стандарт W3C а FastTemplate и php-templates нет... по этому это более перспективный выбор особенно в крупных проектах... т.к. позволяет полностью разграничить функции функциональности и представления... програмист занимается только создаием XML документа а уже потом XSLT верстальщик "натягивает" на него представление.
скоро... (как обычно) я наверно напишу клас для работы с XSLT в качестве шаблонного движка.
Влад
спасибо за пример, но я просила пропарсить повторяющийся блок данных :)
- вопрос про скорость: про скорость твоей работы я поняла :). Хотелось бы услышать по поводу скорости работы получающейся программы в целом
- в упомянутых мной темплейтах используется вполне себе стандартный html (кстати, при этом, скорей всего, с таким же успехом в качестве файла шаблона можно использовать и xhtml и xml (туда же можно вставить признаки болков и переменные в фигурных скобках)
В общем, пока непонятно :[
скоро... (как обычно) я наверно напишу
да Вы, батенька, черному юмору научились =)
Vlad Drakula
03-12-2005, 14:43
mar
еще раз перечитал твой вопрос... но не уверен что я его понял...
у тебя есть данный от базы...
пихает их в XML
while( $programData = mysql_fetch_assoc($List) )
{
$XML .='<program>';
foreach($programData as $name => $value)
$XML .='<'.$name.'><![CDATA['.$value.']]></'.$name.'>';
$XML .='</program>';
}
после чего вызываем преобразование:
xml2html($XML);
я для орработки повторяющихся данных используем шаблон:
<xsl:template match="program">
<li>
<a href="./program.php?pid={Id/text()}">
<xsl:value-of select="ProgramName/text()"/>
</a>
</li>
</xsl:template>
<xsl:template match="program" mode="DescriptionSmall">
<fieldset>
<legend>
<xsl:value-of select="ProgramName/text()"/>
</legend>
<p/>(Êîë-âî ñêà÷èâàíèé: <xsl:value-of select="NAll/text()"/>, Îáíîâëåíî: <xsl:value-of select="Date/text()"/>,
<xsl:if test="License/text()">
<xsl:value-of select="License/text()"/>,
</xsl:if>
<xsl:value-of select="Size/text()"/>
<xsl:text> )</xsl:text>
<p/>
<p><xsl:value-of select="DescriptionSmall/text()" disable-output-escaping="yes"/></p>
<p>
<a href="./download.php?pid={Id/text()}"><img src="images/download.gif" alt="Ñêà÷àòü" width="17" height="23" hspace="10" border="0" align="right"/></a>
<a href="./program.php?pid={Id/text()}">×èòàòü îïèñàíèå ïîëíîñòüþ</a>
<xsl:if test="/page/head/moder = 1">
&nbsp;|&nbsp<a href="./edit.php?pid={Id/text()}">Ðåäàêòèðîâàòü
<xsl:if test="ShowProgram = 0">(ñêðûòà)</xsl:if>
</a>
</xsl:if>
</p>
</fieldset>
</xsl:template>
<xsl:template match="program" mode="Search">
<fieldset>
<legend>
<xsl:value-of select="ProgramName/text()"/>
</legend>
<p/>(Êîë-âî ñêà÷èâàíèé: <xsl:value-of select="NAll/text()"/>, Îáíîâëåíî: <xsl:value-of select="Date/text()"/>,
<xsl:if test="License/text()">
<xsl:value-of select="License/text()"/>,
</xsl:if>
<xsl:value-of select="Size/text()"/>
<xsl:text> )</xsl:text>
<p/>
<p><xsl:value-of select="DescriptionSmall/text()"/></p>
<p>
<a href="./download.php?pid={Id/text()}"><img src="images/download.gif" alt="Ñêà÷àòü" width="17" height="23" hspace="10" border="0" align="right"/></a>
<a href="./program.php?pid={Id/text()}">×èòàòü îïèñàíèå ïîëíîñòüþ</a>
<xsl:if test="/page/head/moder = 1">
&nbsp;|&nbsp<a href="./edit.php?pid={Id/text()}">Ðåäàêòèðîâàòü<xsl:if test="ShowProgram = 0">(ñêðûòà)</xsl:if></a>
</xsl:if>
</p>
<xsl:if test="SiteSearch/Article/node()">
<p><b>Ðåçóëüòàòû ïîèñêà ïðîãðàììû ïî ñàéòó:</b></p>
<xsl:for-each select="SiteSearch/Article[node()]">
<BLOCKQUOTE><a href="{/page/head/SiteDomine}display.php?id={ID}"><xsl:value-of select="Title"/></a><p><xsl:value-of select="Content" disable-output-escaping="yes"/></p></BLOCKQUOTE>
</xsl:for-each>
<a class="head" href="{/page/head/SiteDomine}search.php?searchtext={ProgramNameEncode}">Ñìîòðåòü âñå ðåçóëüòàòû ïîèñêà ïðîãðàììû ïî ñàéòó -></a>
</xsl:if>
</fieldset>
</xsl:template>
<xsl:template match="program" mode="Description">
<h2 align="center">
<xsl:value-of select="ProgramName/text()"/>
<xsl:if test="/page/head/moder = 1"> (<a href="./edit.php?pid={Id/text()}">Ðåäàêòèðîâàòü<xsl:if test="ShowProgram = 0"> (ñêðûòà)</xsl:if></a>)</xsl:if>
</h2>
<br/>
<b>Îáíîâëåíà: <font color="#299024"><xsl:value-of select="Date/text()"/></font></b> (Äîáàâëåíà: <xsl:value-of select="RegDate/text()"/>)<br/>
<b>Îïåðàöèîííàÿ ñèñòåìà: <font color="#299024"><xsl:value-of select="Os/text()"/></font></b><br/>
<b>ßçûê èíòåðôåéñà: <font color="#299024"><xsl:value-of select="Lang/text()"/></font></b><br/>
<b>Òèï ëèöåíçèè: <font color="#299024"><xsl:value-of select="License/text()"/></font></b><br/>
Êîëè÷åñòâî ñêà÷åê çà ñåãîäíÿ: <b><xsl:value-of select="N/text()"/></b><br/>
Êîëè÷åñòâî ñêà÷åê âñåãî: <b><xsl:value-of select="NAll/text()"/></b><br/><br/>
<xsl:for-each select="img">
<br/>
<center>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</center>
<br/>
</xsl:for-each>
<ul class="download">
<li>
<a class="head" href="./download.php?pid={Id/text()}">
<b>Ñêà÷àòü ( <xsl:value-of select="Size/text()"/> )</b>
</a>
</li>
<xsl:if test="HomePage/text()">
<li>
<a class="head" href="{HomePage/text()}">
<b>
<xsl:choose>
<xsl:when test="Author"><xsl:value-of select="Author/text()"/></xsl:when>
<xsl:otherwise>Äîìàøíÿÿ ñòðàíèöà ïðîãðàììû</xsl:otherwise>
</xsl:choose>
</b>
</a>
</li>
</xsl:if>
<li>
<xsl:choose>
<xsl:when test="threadid/text() != 0">
<a class="head" href="{/page/head/ForumDomine/text()}showthread.php?t={threadid/text()}"><b>Îáñóäèòü íà ôîðóìå</b></a>
</xsl:when>
<xsl:otherwise>
<a class="head" href="{/page/head/ForumDomine/text()}"><b>Îáñóäèòü íà ôîðóìå</b></a>
</xsl:otherwise>
</xsl:choose>
</li>
</ul>
<br/>
<xsl:value-of disable-output-escaping="yes" select="Description/text()"/>
</xsl:template>
а ты оффлайн справочник по теме имеешь какойнибудь?:)
может поделишься?:)
хватит спамить мне мыло с сообщениями о том что форум уже работает:)
Vlad Drakula
03-12-2005, 15:37
E-mail
у меня есть онлайн справочник + большой опыт работы с XSLT
Vlad Drakula
онлайн справочник - это интернет чтоли?:)
та, вот еще
Александр Календарев. Шаблонизация на XSLT. Приемы и примеры (http://www.raleigh.ru/a/pub/2005/templates.html)
Статья рассчитана на начинающих пользователей XSLT-шаблонизации, знающих хотя бы ее основы.
основы знаю плохо, но пошла читать :)
Господа, помогите решить задачу!
Есть небольшой список, нужно выбрать только пять элементов, два с начала и два с конца элемента который установлен в selected="yes"
Тоесть в этом случае нужно выбрать элементы :
<item id="30"/>
<item id="40"/>
<item id="50" selected="yes"/>
<item id="60"/>
<item id="70"/>
Как с помощью XSLT это можно сделать? Пробовал ставить разные условия...ну никак не получается получить позицию выбранного элемента. ;) Может я вообще не в ту сторону копаю?
P.S. Кстати, это вопрос из темы постраничного вывода (как на этом форуме, отображать пять страниц, даже если их больше).
Код:
<?xml version="1.0" encoding="windows-1251"?>
<site>
<page>
<item id="10"/>
<item id="20"/>
<item id="30"/>
<item id="40"/>
<item id="50" selected="yes"/>
<item id="60"/>
<item id="70"/>
<item id="80"/>
<item id="90"/>
<item id="100"/>
<item id="110"/>
...
<item id="120"/>
</page>
</site>
Vlad Drakula
23-12-2005, 21:50
benya
я думаю что примерно так:
правдо я сомневаюсь что по памяти написал без ошибок названия осей...
select="item[foluing-sibling::item[position() lt 3][@selected='true'] or @selected='true' or presiding-sibling::item[position() lt 3][@selected='true']]"
P.S. Кстати, это вопрос из темы постраничного вывода (как на этом форуме, отображать пять страниц, даже если их больше).
уверяю тебя... ты не хочешь узнать как это сделано... я писал к этой штуке хак... мне этого хватило...
Да, примерно так оно и есть ;)))
уверяю тебя... ты не хочешь узнать как это сделано... я писал к этой штуке хак... мне этого хватило...
Не понял ;)
Пожалуйста помогите новичку:
нужно написать скрипт в XSL-шаблоне на JavaScript'е. Все вроде бы нормально, но символ & в теле скрипта не воспринимается. Т.е. выдается ошибка:
Error number: 2 Error string: XML parser error 4: not well-formed (invalid token)
на любое вхождение & в условие или просто в строку.
Что это?!
Помогите кто чем может...
Кстати, если вернуться к мультиязычности сайтов. Как можно прописать по-человечески encoding?
На русскую версию нужно windows-1251, на английскую utf-8.
Можно было предположить что-то типа этого: encoding="{$lang}", но так на самом деле сделать то и нельзя... 2 отдельных главных документа создавать? Как это вообще решается?
<xsl:output method="html" indent="yes" encoding="windows-1251" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>
asdfga,
Нужно соблюдать правила экранирования, тоесть & записывается как &amp; а < > записываются как &lt; &gt; и так далее... Ну или использовать секции CDATA
Vlad Drakula
01-02-2006, 16:55
так...
я тут наткнулся на один очень не приятный момент.
XML не я вляется валидным HTML и на оборот... и есть ряд разлачий, по этому если вам нужен именно HTML то обязательно выставляете в параметрах то что вам нужен HTML, а то потом будете долго париться и искать ломанную верстку!
Vlad Drakula
01-02-2006, 17:18
XML это и есть большай обстракция!!!
XML это дерево.
но не просто дерево элементов... в этом дереве есть элементы разных классов...
XHTML это тоже дерево... причем по синтакчису XHTML файлы относятся в подвиду XML.
а теперь как это нужно использовать:
у нас есть данные, мы их сериализуем в XML
после чего применяем XSL который преобразует XML в другой XML (и ничего другово)
но в нащих сихал чтобы исходящи XML был XHTML
для этого в XSL нужно просто одни теги заменить на другие о поменять разметку так как хочешь чтобы это выглядело в XHTML
взято из разговора с одним человеком
Vlad Drakula
01-02-2006, 17:20
меня часто спрашиваю что использовать для написания XSL
я в рабочих целях использую XML Spy (http://www.altova.com/)
Vlad Drakula
01-02-2006, 17:32
вопрос: как сделать XSL преобразование на стороне клиента?
ответ:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://www.w3.org/Math/XSL/mathml.xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml">
...
Vlad Drakula xml spy хм..
может какинибудь при очередном создании xsl запишишь видиоэкзампл?:)
по крайней мере тебе это будет быстрее воплотить нежели тут все еще ждать рабочего примера;))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.