Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Что еще можно сделать с XML + XSLT + XSL (http://forum.oszone.net/showthread.php?t=54773)

FADE 12-09-2004 07:42 212621

приступил к изучению, но вот только не как не пойму, как это все работает)

IE 6 какуето несоурядицу показывает, может надо какойто можуль устонавливать дополнительно?

не в плом, наваяйте простенький рабочий пример XSL XHTML чтобы работал в IE 6, чтонибудь типа hello world с красивастями показывающие возможности.

спасибо.

Vlad Drakula 12-09-2004 20:11 212622

FADE
чего то я тебя не понимаю...

может ты хотел спросить про XLT ???


FADE 13-09-2004 03:11 212623

Vlad Drakula нет именн0 XHTML - прил0жение XML.

80т п04итай:




XML сегодня
Из наиболее значимых этапов современного развития XML и различных технологий на его основе надо отметить следующие.

Ноябрь 1999 г. Выход языка XSLT, позволившего преобразовывать одно XML-представление данных в другое с учетом возможной разницы в организации этих данных и в наборах тегов. Обновленный вариант таблиц стилей XSLT 2 готовится к опубликованию в ближайшее время.

Январь 2000 г. Выход языка XHTML 1.0, представляющего семантику последней версии HTML 4.01 в виде XML-файлов.

Май 2001 г. Опубликована версия XHTML 1.1, реализующая модульный подход к созданию XHTML-файлов, что позволило анализировать эти файлы одинаковыми способами в разных операционных системах (в 2003 г. появилась версия XHTML 2.0, определяющая синтаксис HTML с помощью трех DTD-документов).

В этом же месяце усилиями WWW-консорциума увидела свет концепция XML Schema, которую в свое время предложила Microsoft, чтобы, видимо, полностью избавиться от наследия SGML. Концепция предназначалась для борьбы с главным недостатком XML – отсутствием в XML-документе жесткой привязки к определению типа документа DTD, ключевой концепции SGML. В XML возможность указания DTD-документа входила, но была необязательной, что нередко лишало XML-документы смысла, так как без определения значений тегов и их взаимосвязи такие документы нельзя было корректно интерпретировать.

На смену определениям типов документов DTD была призвана идея XML-схем. XML Schema позволила описывать структуру XML-документа и дополнила DTD средствами указания типов данных для различных тегов, что решило проблему использования одинаковых тегов в разных целях. Она не устранила главный недостаток XML, но оказала стимулирующее воздействие на разработчиков XML-документов, подтолкнув их к применению схем.

В то же время создалось впечатление, что Microsoft предложила схемы с целью внести раскол в сообщество XML-разработчиков и вновь перетянуть одеяло XML на себя. Корпорация выпустила свой вариант XML Schema еще до официального одобрения этой концепции консорциумом WWW, а затем ее примеру последовали другие производители. Кроме того, с появлением XML Schema возникла потребность в технологиях преобразования XML-данных с одной схемой в эти же XML-данные, представленные с помощью другой схемы. В результате был предложен универсальный формат Web-данных RDF, упростивший этот процесс. Но массового распространения он пока не получил .

Июнь 2001 г. Технология Xlink добавила интеллекта гиперссылкам XML – теперь стало возможным указывать, например, сценарий действий программы при щелчке пользователя на конкретной ссылке.

Технология XML Base позволила передавать элементы XML-документов по частям, что дало возможность понизить нагрузку на сети, где работали XML-приложения, и оптимизировать процесс обработки XML-данных .

Технология XPointer ввела в XML средства формирования указателей на объекты любых типов и любые их части (не только элементы текста).

Август 2001 г. Вышел язык SMIL 2.0, ориентированный на поддержку XML-документов в мобильных телефонах с доступом в Интернет.

Сентябрь 2001 г. Опубликовано описание языка SVG 1.0 – средства независимого представления векторной графики в Сети на основе XML (в нынешнем году появилась версия SVG 1.2, дополненная средствами качественного рендеринга, динамического формирования графических образов, поддержкой графики в разных форматах и т. д.).

Февраль 2002 г. Технология XML-Signature определила принципы использования электронной подписи XML-документов.

Текущий год богат на новые и обновленные XML-приложения и технологии. В феврале была наконец опубликована предварительная рекомендация стандарта XML 1.1. Потребность в совершенствовании XML возникла прежде всего в связи с развитием кодировки Unicode и новыми возможностями Unicode 2.0. Стало допустимым использовать произвольные кодировки символов в названиях элементов, удалось уйти от проблем с представлением символов перевода строки в разных операционных системах. Отметим, что WWW-консорциум разработал свою кодировку UCS (Universal Character Set), основанную на стандартах Unicode Standard и ISO/IEC 10646, и рекомендовал применять ее при построении всех текстовых материалов в Сети.

Были выпущены описания языка подготовки Web-форм XForms 1.0 , в котором разделены способы представления внешнего вида форм и их содержания, а также языка EMMA, задающего способы взаимодействия между человеком и программами в Сети. Этот язык определяет, как использовать XML для интерпретации информации, получаемой от пользователя не только через обычный графический интерфейс, но и в виде речевых сигналов, жестов, рукописного текста и пр.

Важной вехой в развитии СУБД стал документ по универсальному языку запросов к базам данных XML Query 1.0, синтаксически напоминающему SQL и Бейсик. XML Query позволяет готовить сложные запросы не только к реляционным данным, но и к информации, организованной иерархически и другими способами (при условии, что она хранится в XML-формате или ее можно просматривать в XML-представлении).

Консорциум OASIS, выросший, как уже говорилось, из группы SGML Open, специализируется на разработке открытых стандартов э-бизнеса, действуя при этом в тесной связке с WWW-коллегами. Среди его последних материалов – язык XLIFF для разметки и форматирования данных с учетом региональных стандартов и графическая нотация моделирования бизнес процессов BPMN 1.0, ориентированная на технических и бизнес-специалистов.

Среди готовящихся к выпуску спецификаций XML-приложений такие, например, как язык описания трехмерных интерактивных миров X3D, призванный заменить язык виртуальной реальности VRML, и вторая версия языка представления математических выражений MathML, позволяющая описывать с помощью набора ANSI-символов внешний вид математических формул и их смысл.

Интересно, что в сентябре Тим Бернерс-Ли, директор WWW-консорциума, выдвинул идею коммерческого лицензирования ряда ISO-кодировок, задающих коды национальных языков, стран и валют. К чему приведет подобная инициатива, пока сказать сложно.


Vlad Drakula 13-09-2004 04:20 212624

FADE
то что ты имел в виду это действительно XLT - это преобразование.

броузеры его не умеют делать да и незачем им это уметь...

для этого нужен сервер или специальная программа!

XHТML - это не язык програмирования, да и XML тоже.

XML это всеголишь правила зранения структурированных данных. если в результате получается программа, то это означает что XML задает данные и алгоритмы, но все равно это не язык програмирования!

FADE 15-09-2004 02:34 212625

Vlad Drakula

э, разве XHTML это не язык разметки?

Добавлено:

для браузера есть какойнить примерчик?:)

Vlad Drakula 15-09-2004 23:20 212626

FADE
а в чем проблемма?
XHTML - это тотже HTML только с более строгими правилами синтаксиса!

FADE 17-09-2004 02:58 212627

Vlad Drakula
спасибо за пример

Vlad Drakula 20-09-2005 13:54 356878

Что еще можно сделать с XML + XSLT + XSL
 
на форуме я не однократно упоминал о связке "XML + XSLT + XSL"
чтожь пока начинать расскаживать о ней более подробно...

XML - формат данных позволяющий кронить как данные так и их структуру расположения, этот формат предполагает древовидную иерархию.

XSLT - это язык програмирования, на нем создаются преобразования одного XML дома в другой XML дом
(грубо говоря)

XSL - это правила визализации (некий потомок CSS)

все три формата разработывались паралелно, но при этом все они являются XML файлами.

все это было придумано для упрощения обмена и преобразования данных.


vadimiron 20-09-2005 16:15 356912

Есть вполне неплохие туториалы от тех людей, которые в общем то стандартизацией этих технологий занимаются:http://www.w3schools.com/default.asp

mar 22-09-2005 09:54 357439

Вот еще ссылка: Язык преобразований XSL (XSLT) Версия 1.0 Рекомендация W3C от 16 ноября 1999 (Перевод выполнен Радиком Усмановым, Luxoft (IBS))

Vlad Drakula 22-09-2005 11:48 357482

XSL Transformations (XSLT) Version 2.0

Vlad Drakula 22-09-2005 13:09 357509

еще один хороший ресурс по XSLT zvon.org

benya 29-09-2005 12:11 359942

Господа модераторы, чего спите? Давайте развивать тему! Тема очень перспективная и интересная. А то понагоняли понтов и в кусты. :tease: Давайте переходить к примерам. Лучше с самых простейших. :sorry: :tomato:

Vlad Drakula 29-09-2005 22:49 360167

benya
а ты например вопросы задавай...

E-mail 29-09-2005 22:52 360168

давайте пример для hello world

давайте разберем пример:

test.xsl

Код:

<?xml version="1.0" encoding="windows-1251"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
               
        <xsl:output method="html" encoding="windows-1251" indent="no"/>               
        <xsl:variable name="navcnt" select="0"></xsl:variable>

        <xsl:template match="item">
                <a>
                        <xsl:attribute name="href">
                                <xsl:value-of select="@href"/>
                        </xsl:attribute>

                        <xsl:attribute name="class">
                                mystyle1
                        </xsl:attribute>

                        <xsl:otherwise>
                                <xsl:choose>
                                        <xsl:when test="@hot_rub = 1">
                                                <b><xsl:value-of select="@txt"/></b>
                                        </xsl:when>
                                </xsl:choose>
                        </xsl:otherwise>
                </a>
        </xsl:template>       
</xsl:stylesheet>

как это использовать и что там что значит?

Vlad Drakula 29-09-2005 23:11 360176

E-mail
этот темплейт заменяет все элементы "item" во входном XML

Код:


<xsl:template match="item">
???
</xsl:template>

на элемент "а"

Код:


<xsl:template match="item">
        <a>
???
        </a>
</xsl:template>

в элементре "а" создается атребут "href"

Код:


<xsl:template match="item">
<a>
<xsl:attribute name="href">
???
</xsl:attribute>
???
</a>
</xsl:template>

в качестве его значения берется значение атрибута "href" у исходного элемента

Код:


<xsl:template match="item">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@href"/>
</xsl:attribute>
???
</a>
</xsl:template>

задаем стиль ссылки

Код:


<xsl:template match="item">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@href"/>
</xsl:attribute>
<xsl:attribute name="class">
mystyle1
</xsl:attribute>
???
</a>
</xsl:template>

//дальше похоже идет на правильный код!

вставляем текст ссылки

Код:


<xsl:template match="item">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@href"/>
</xsl:attribute>
<xsl:attribute name="class">
mystyle1
</xsl:attribute>
???
<xsl:value-of select="@txt"/>
???
</a>
</xsl:template>

если значение атрибута "hot_rub" = 1
то ссылку нужно выделить жирным

Код:


<xsl:template match="item">
<a>
<xsl:attribute name="href">
<xsl:value-of select="@href"/>
</xsl:attribute>
<xsl:attribute name="class">
mystyle1
</xsl:attribute>
<xsl:choose>
<xsl:when test="@hot_rub = 1">
<b><xsl:value-of select="@txt"/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@txt"/>
</xsl:otherwise>
</xsl:choose>
</a>
</xsl:template>


E-mail 30-09-2005 00:31 360186

Цитата:

этот темплейт заменяет все элементы "item" во входном XML
1. а что это за элементы?
2. откуда беруться @href и @txt
3. насколько я понял это талица стиля, но если ее открыть IE 6 то ничего не видно, можно пример связывающий мой пример полной работы с данными используя эти технологии? ну просто чтобы всем наглядно было и понятно как это работает..

elfoflorien 30-09-2005 16:46 360405

Vlad Drakula
RSS тоже можно отнести в эту группу как разновидность XML?

vadimiron 30-09-2005 18:37 360442

Цитата:

RSS тоже можно отнести в эту группу как разновидность XML?
Угу, это XML-подобный документ, только там есть обязательные теги, а в XML нет

Vlad Drakula 30-09-2005 22:23 360537

vadimiron
Цитата:

XML-подобный документ
впервые слыше подобное понятие...

elfoflorien
RSS это XML файл с определенным DTD

Vlad Drakula 02-10-2005 10:48 360801

в связи с тем что доки у нас не в чести, лично привожу выписку о том как это бзать из доки по ПХП

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 код:

<?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 код:

<?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 код:

<?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 360802

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

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('&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 361117

Так что выполняет эти преобразования, браузер или некий текстовый "просессор"?

Vlad Drakula 04-10-2005 00:04 361207

benya
и то и другое может это делать.

E-mail 04-10-2005 04:06 361248

benya я бы сказал гипертекстовый :)

Vlad Drakula 04-10-2005 11:41 361311

E-mail
Цитата:

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

benya 04-10-2005 13:54 361360

Господа, а кто подскажет нормальный XSLT парсер для PERL. Нашел Sablotron, да вот не нравится он мне совсем и установка его тоже ;)

Greyman 05-10-2005 17:24 361737

Глоссарий по XML
 
Не знаю точно куда бросить: в Программирование, Вэбмастеру или вообще во Флейм. Пока кидаю в Вэбмастеру, далее модеры решат...

Тут давеча искал в инете фигню всякую, дык наткнулся на такой ресурс:
Глоссарий по стандартам платформы XML
Цитата:

Целью предлагаемой работы является систематизация терминологии стандартов активно развиваемой в последние годы консорциумом W3C новой технологической платформы Web, основанной на расширяемом языке разметки XML. Сложности здесь заключаются не только в большом объеме сложным образом взаимосвязанных документов, определяющих указанные стандарты, но и в том, что русскоязычная терминология в этой области лишь начинает формироваться и охватывает пока, главным образом, только собственно стандарт XML. Между тем, функциональность Web нового поколения определяется всем комплексом стандартов платформы XML, многие из которых уже начинают активно использоваться на практике. В связи с этим, формирование русскоязычной терминологии стандартов XML-платформы представляется нам актуальным и важным делом.
Предлагаемая версия глоссария значительно отличается от первой его версии, опубликованной 28.06.2000. В нее дополнительно включена терминология важных стандартов XSL и XSLT, уточнены материалы, заимствованные из предыдущей версии, исправлены замеченные погрешности.
Думаю лишним не будет...

benya 11-10-2005 12:12 363277

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

Vlad Drakula 11-10-2005 12:32 363289

benya
1) разрабатываешь концепцию веб приложения и его структуру
2) разрабатываешь дом модель
3) генеришь XML с сответствующим домом
4) преобразовываешь его в посошью соответствующего XSLT преобразования.

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

benya 11-10-2005 15:44 363357

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

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

Vlad Drakula 11-10-2005 19:24 363406

benya
1)
если программер проффи то по скорости вшитый намертво дизайн не обогнать...
по моим представлениям евал будет меддленнее т.к. к нему не применяется оптимизация и кеширование.

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

benya 12-10-2005 17:11 363670

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

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

Vlad Drakula 12-10-2005 22:04 363736

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

E-mail 12-10-2005 23:41 363771

Vlad Drakula
приведи пожалст код

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

mar 13-10-2005 00:58 363777

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

Vlad Drakula 13-10-2005 10:33 363854

mar
Цитата:

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

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

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

benya 13-10-2005 14:54 363958

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 363979

benya
Цитата:

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

Цитата:

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

Цитата:

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

mar 13-10-2005 16:42 363983

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

benya 13-10-2005 18:29 364010

Vlad Drakula
Цитата:

а дизайнер вместо того чтобы верстать HTML шаблоны будет верстать XSLT шаблоны...
Где ж такого умного дизайнера то взять? :search:

Цитата:

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

Vlad Drakula 13-10-2005 19:30 364024

benya
1) а что ты не можешь ставить свои модули на сервер?
2) на самом деле XSLT не особо сложнее HTML ;)

benya 14-10-2005 11:41 364214

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

Vlad Drakula 14-10-2005 11:58 364226

benya
ну... не знаю... я вот знаю хостеров которые позволяют даже собственный подуль пхп собирать на сервере.

benya 14-10-2005 12:19 364234

Vlad DrakulaЛюди то разные бывают, такого могут насобирать :o

E-mail 15-10-2005 19:56 364571

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-файл


PHP код:

// Разместить новый 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-данные

PHP код:

// Разместить новый 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-данные

PHP код:

// $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 369163

Не дождемся видать приложения. Ок. Есть следующий вопрос!
Имеем хмл файл:
PHP код:

<?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 369294

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

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

E-mail 10-11-2005 06:46 372118

Цитата:

Не дождемся видать приложения
benya дракула там в соседней ветке помогает людям фреймы использовать, освободится - тогда....

Vlad Drakula 10-11-2005 11:55 372244

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 372477

Vlad Drakula

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

benya 10-11-2005 22:37 372513

Vlad Drakula
А что такое replace(., '\n', '<br/>')? В спецификации я такого не видел. А вообще я уже решил проблему вот этим disable-output-escaping. Думаю мне подойдет. А еще предлагали мне использовать целые огромные куски кода для решения сего. Мне не понравилось и я делаю переводы сразу со скрипта.
E-mail Нафиг они те фреймы, тут технологию нужно так сказать оседлать ;)

Vlad Drakula 11-11-2005 00:39 372546

E-mail
Цитата:

приложение обещенное когда покажешь?..
времени нету запустить в свет! но скоро вы его все увидете!

benya
Цитата:

А что такое replace(., '\n', '<br/>')? В спецификации я такого не видел.
это есть в спецификации XSLT 2.0

E-mail 12-11-2005 00:01 373090

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

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

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

benya 29-11-2005 21:55 378591

Господа, есть следующий 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 378928

benya
нузно использовать именованные шаблоный с параметрами + разные моды преобразования

benya 02-12-2005 20:12 379255

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

Vlad Drakula 02-12-2005 23:56 379304

benya
2,0 есть в саксоне...

benya 03-12-2005 10:59 379408

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

Vlad Drakula 03-12-2005 11:37 379417

benya
саксон работает под явой, так что он есть под всеми операционками...

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

benya 03-12-2005 11:49 379420

На самом деле в ступор сервер можно вогнать чем угодно. Взять image-magick и сутками крутить по кругу фото 10 мегапикселей. Это и так ясно. Но мне ответили что никому кроме меня это не нужно из более 3000 клиентов. А может и просто не захотели возиться с модулями, так как там добрый десяток зависимостей модулей и столько ж пакетов. Досадно как.

Vlad Drakula 03-12-2005 12:00 379423

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.
сейчас есть хостеры которые все это готовы поставить... просто надо поискать...

mar 03-12-2005 12:33 379431

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 379434

mar
Цитата:

а можно более официальное название не дошло - что это?
Цитата:

Saxon
Цитата:

Кстати вопрос - кто-нибудь использовал XML/XSL шаблоны под PHP?
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('&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);


Цитата:

Еще два вопроса: насколько удобно использование таких шаблонов
- по скорости (особенно здорово было бы в сравнении с FastTemplate и php-templates).
- По удобству (для программиста) (по сравнению с шаблонами, используищие принцип парсинья блоков и переменных, вроде того, что тут:
Код:
1) т.к. я очень хорошо изучил XSLT то для меня очень удобно
2) XSLT это стандарт W3C а FastTemplate и php-templates нет... по этому это более перспективный выбор особенно в крупных проектах... т.к. позволяет полностью разграничить функции функциональности и представления... програмист занимается только создаием XML документа а уже потом XSLT верстальщик "натягивает" на него представление.

скоро... (как обычно) я наверно напишу клас для работы с XSLT в качестве шаблонного движка.

mar 03-12-2005 14:34 379454

Влад
спасибо за пример, но я просила пропарсить повторяющийся блок данных :)
- вопрос про скорость: про скорость твоей работы я поняла :). Хотелось бы услышать по поводу скорости работы получающейся программы в целом
- в упомянутых мной темплейтах используется вполне себе стандартный html (кстати, при этом, скорей всего, с таким же успехом в качестве файла шаблона можно использовать и xhtml и xml (туда же можно вставить признаки болков и переменные в фигурных скобках)

В общем, пока непонятно :[

Цитата:

скоро... (как обычно) я наверно напишу
да Вы, батенька, черному юмору научились =)

Vlad Drakula 03-12-2005 14:43 379458

mar
еще раз перечитал твой вопрос... но не уверен что я его понял...

у тебя есть данный от базы...
пихает их в XML
PHP код:

while( $programData mysql_fetch_assoc($List) )
{
  
$XML .='<program>';
  foreach(
$programData as $name => $value)
    
$XML .='<'.$name.'><![CDATA['.$value.']]></'.$name.'>';
  
$XML .='</program>';


после чего вызываем преобразование:

PHP код:

xml2html($XML); 

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

HTML код:



        <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">
                                        &amp;nbsp;|&amp;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">
                                        &amp;nbsp;|&amp;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}">Ñìîòðåòü âñå ðåçóëüòàòû ïîèñêà ïðîãðàììû ïî ñàéòó -&gt;</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>


E-mail 03-12-2005 14:49 379461

а ты оффлайн справочник по теме имеешь какойнибудь?:)
может поделишься?:)

хватит спамить мне мыло с сообщениями о том что форум уже работает:)

Vlad Drakula 03-12-2005 15:37 379466

E-mail
у меня есть онлайн справочник + большой опыт работы с XSLT

E-mail 03-12-2005 17:59 379492

Vlad Drakula
онлайн справочник - это интернет чтоли?:)

mar 03-12-2005 19:44 379512

та, вот еще
Александр Календарев. Шаблонизация на XSLT. Приемы и примеры
Цитата:

Статья рассчитана на начинающих пользователей XSLT-шаблонизации, знающих хотя бы ее основы.
основы знаю плохо, но пошла читать :)

benya 22-12-2005 13:17 385821

Господа, помогите решить задачу!
Есть небольшой список, нужно выбрать только пять элементов, два с начала и два с конца элемента который установлен в 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 386290

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. Кстати, это вопрос из темы постраничного вывода (как на этом форуме, отображать пять страниц, даже если их больше).
уверяю тебя... ты не хочешь узнать как это сделано... я писал к этой штуке хак... мне этого хватило...

benya 26-12-2005 20:14 387007

Да, примерно так оно и есть ;)))
Цитата:

уверяю тебя... ты не хочешь узнать как это сделано... я писал к этой штуке хак... мне этого хватило...
Не понял ;)

asdfga 26-12-2005 21:32 387018

Пожалуйста помогите новичку:
нужно написать скрипт в XSL-шаблоне на JavaScript'е. Все вроде бы нормально, но символ & в теле скрипта не воспринимается. Т.е. выдается ошибка:

Error number: 2 Error string: XML parser error 4: not well-formed (invalid token)

на любое вхождение & в условие или просто в строку.
Что это?!
Помогите кто чем может...

benya 26-12-2005 22:04 387025

Кстати, если вернуться к мультиязычности сайтов. Как можно прописать по-человечески 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;amp;
а < > записываются как
Код:

&amp;lt; &amp;gt;
и так далее... Ну или использовать секции CDATA

Vlad Drakula 01-02-2006 16:55 399709

так...
я тут наткнулся на один очень не приятный момент.

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

Vlad Drakula 01-02-2006 17:18 399713

XML это и есть большай обстракция!!!
XML это дерево.

но не просто дерево элементов... в этом дереве есть элементы разных классов...

XHTML это тоже дерево... причем по синтакчису XHTML файлы относятся в подвиду XML.


а теперь как это нужно использовать:
у нас есть данные, мы их сериализуем в XML
после чего применяем XSL который преобразует XML в другой XML (и ничего другово)

но в нащих сихал чтобы исходящи XML был XHTML
для этого в XSL нужно просто одни теги заменить на другие о поменять разметку так как хочешь чтобы это выглядело в XHTML

взято из разговора с одним человеком

Vlad Drakula 01-02-2006 17:20 399714

меня часто спрашиваю что использовать для написания XSL
я в рабочих целях использую XML Spy

Vlad Drakula 01-02-2006 17:32 399720

вопрос: как сделать 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">
...


E-mail 02-02-2006 00:15 399833

Vlad Drakula xml spy хм..

может какинибудь при очередном создании xsl запишишь видиоэкзампл?:)
по крайней мере тебе это будет быстрее воплотить нежели тут все еще ждать рабочего примера;))

Vlad Drakula 02-02-2006 00:28 399838

E-mail
а что за рабочий пример тебе нужен?

benya 06-02-2006 14:51 403745

Vlad Drakula,
Как можно сделать группировку по трем знаениям?

Vlad Drakula 19-02-2006 00:26 408148

я долго обещал показать сайт который использует XSL в качестве движка шаблонов...

вот он: http://soft.oszone.net/

mar 19-02-2006 00:51 408162

Vlad Drakula
это к тому, что ты переделал Software? Или Gi? Или вы оба :) ? Когда успели :) ?

Vlad Drakula 19-02-2006 00:54 408164

mar
ну... я достаточно быстро уперся в то что чтобы что то поменять во внешнем виде мне нужно менять PHP код... что мне не очень хочется... по этому я сел и переделал... что увеличило гибкость движка в разы + усложнило создание не валидного HTML...

mar 19-02-2006 01:11 408172

Vlad Drakula
Цитата:

чтобы что то поменять во внешнем виде мне нужно менять PHP код
можно на пальцах (на примерах) случай, когда надо было лезть в PHP и когда в php больше лезть не надо?

Vlad Drakula 19-02-2006 01:24 408176

mar
например расчитывает показывать сслылку "следующие 10 програм" сам шаблон без участия php.
php так же не участвует в разбиениям по датам на главной странице.

mar 19-02-2006 01:46 408183

Цитата:

например расчитывает показывать сслылку "следующие 10 програм
а в чем расчет? все равно где-то работает count(*) через все тот же PHP, высовывающий наружу отсчет общего количества и, надо полагать какие-нибудь переменные для limit-а? (у тебя это в GET-е:
Цитата:

start=15
(
Цитата:

Предыдущие 15 программ
)
Цитата:

php так же не участвует в разбиениям по датам на главной странице.
а это случаем не пререгатива запроса? информация-то ведь все равно из базы? и опять-таки не минуя PHP?

Vlad Drakula 19-02-2006 02:29 408205

mar
Цитата:

Цитата mar
а это случаем не пререгатива запроса? информация-то ведь все равно из базы? и опять-таки не минуя PHP?

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

E-mail 19-02-2006 06:07 408240

Vlad Drakula
как беруться из базы?
можно поподробнее об xmlquery?

---

по поводу совт.осзон - а нельзя придать выводимому коду человекоподобный вид?:)


Vlad Drakula 19-02-2006 09:56 408259

E-mail
Цитата:

Цитата E-mail
как беруться из базы?

PHP код:

// берем из базы
$List mysql_query('SELECT *
                       FROM program
                            '
.$where2.'
                   ORDER BY Date DESC
                      LIMIT '
.$_REQUEST['start'].', 15;') or print mysql_error() ;

// пихаем в XML
$SoftNews='<news>';
while( 
$Item mysql_fetch_assoc($List) )
{
  
$Item['DateString']=date('j'strtotime($Item['Date'])).' '.$M[date('n'strtotime($Item['Date']))];
  
$SoftNews .='<program>';

  if(
$Item['Size'] < 1024)
    
$Item['Size'] = $Item['Size'].' ÊÁ';
  else
    
$Item['Size'] = round($Item['Size']/10241).' ÌÁ';

  foreach(
$Item as $name => $value)
    
$SoftNews .='<'.$name.'><![CDATA['.$value.']]></'.$name.'>';
  
$SoftNews .='</program>';
}

$SoftNews .='</news>'

Цитата:

Цитата E-mail
можно поподробнее об xmlquery?

xmlquery пока вроде поддерживают только ORACLE и MSSQL

Цитата:

Цитата E-mail
по поводу совт.осзон - а нельзя придать выводимому коду человекоподобный вид?

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

benya 19-02-2006 17:40 408354

Все это смахивает на какое-то шаманство ;) Где собственно отделение логики от контента??? ;)))))
Чем дальше тем больше понимаешь что мы просто перетаскиваем часть кода из PHP или PERL в шаблонные правила XSLT. Дизайнеру там делать нечего ;))
А еще к слову что XSLT не сложнее HTML отвечу на собственный вопрос по поводу группировки по трем значениям (подсказали умные люди на форуме). Тоесть создание древовидного меню с уникальными значениями:
Входной XML
Код:

<menu>
<item category="Рафтинг" country="Украина" namen="Днестр"/>
<item category="Рафтинг" country="Россия" namen="Карелия"/>
<item category="Рафтинг" country="Россия" namen="Байкал"/>
<item category="Треккинг" country="Украина" namen="Днестр"/>
<item category="Рафтинг" country="Россия" namen="Карелия"/>
<item category="Рафтинг" country="Россия" namen="Карелия"/>
<item category="Спелео" country="Россия" namen="Алтай"/>
<item category="Рафтинг" country="Украина" namen="Черемош"/>
</menu>

XSLT:
Код:

<xsl:key name="category" match="item" use="@category"/>
<xsl:key name="country" match="item" use="concat(@category,'-',@country)"/>
<xsl:key name="name" match="item" use="concat(@category,'-',@country,'-',@namen)"/>
<xsl:template match="menu">
  <list><xsl:text>&#xA;</xsl:text>
    <xsl:apply-templates select="item[generate-id(.) = generate-id(key('category',@category))]"/>
  </list>
</xsl:template>
 
<xsl:template match="item">
  <category name="{@category}"><xsl:text>&#xA;</xsl:text>
 
    <xsl:for-each select="key('category',@category)">
      <xsl:variable name='country' select="key('country', concat(@category,'-',@country))"/>
     
      <xsl:if test="generate-id(.) = generate-id($country)">
        <country name="{@country}"><xsl:text>&#xA;</xsl:text>
          <xsl:apply-templates select='$country' mode='country'/>
        </country><xsl:text>&#xA;</xsl:text>
      </xsl:if>
    </xsl:for-each>
   
  </category><xsl:text>&#xA;</xsl:text>
</xsl:template>

<xsl:template match='item' mode='country'>
<xsl:variable name='name' select="key('name', concat(@category,'-',@country,'-',@namen))"/>
<xsl:if test="generate-id(.) = generate-id($name)">
<item name='{@namen}'/><xsl:text>&#xA;</xsl:text>
</xsl:if>
</xsl:template>

Выход:
Код:

<category name="Рафтинг и сплавы">
 <country name="Украина">
  <item name="Днестр"></item>
  <item name="Черемош"></item>
  <item name="Тиса"></item>
  <item name="Черный Черемош"></item>
  <item name="Южный Буг"></item>
  <item name="Десна"></item>
  <item name="Рось"></item>
  <item name="Северский Донец"></item>
 </country>
 <country name="Россия">
  <item name="Карелия"></item>
  <item name="Байкал"></item>
  <item name="Алтай"></item>
  <item name="Кавказ"></item>
  <item name="Урал"></item>
 </country>
</category>
...

Глаза сломать тут можно точно. ;) Но хочу вам сказать что лучше рыться в этом, чем в бесчисленных шаблонах разнообразных шаблонизаторов.

Vlad Drakula 19-02-2006 18:55 408367

benya
суть в разделении ин6формации и то как она отображается!

vadimiron 19-02-2006 19:21 408377

Цитата:

и сразу посылаются на шаблонныйх движок, который сам разбивает их по дням, php никак не участвует в этом деле
я бы наверно по дням всё таки на пхп разделял, а вот именно ХТМЛ код, то есть именно отображение, уже делал через XSLT преоброзавания

Vlad Drakula 19-02-2006 19:36 408382

vadimiron
еще раз...
я не однократно тыпаюсь показать что при использовании XSL граница между кодом и шаблоном смещается!
и раскладка становится такой:
PHP + SQL: собирают данные которые нужно отобразить
XSL: уже отображает данные так как нужно!


Цитата:

я бы наверно по дням всё таки на пхп разделял, а вот именно ХТМЛ код, то есть именно отображение, уже делал через XSLT преоброзавания
как не странно но на PHP это делать на много сложнее чем на XSL!!!

vadimiron 19-02-2006 20:49 408398

Не, я не говорю, что это как то сложно или непонятно, просто каждый сам для себя эту самую границу устанавливает

mar 20-02-2006 00:31 408450

а я бы вообще все разбиение постаралась сместить в SQL :)
Цитата:

просто каждый сам для себя эту самую границу устанавливает
это точно.

Vlad Drakula
опиши, пожалуйста, этапы обработки ну вот хоть этого запроса. Что мы имеем между SELECT и инткрфейсом, который видим? (это я между прочим к лишним (или необходимым?) этапам, числу вовлеченных в процесс трансляторов и скорости :).

E-mail 21-02-2006 04:03 408883

Vlad Drakula я уважаю кроссинги во всех проявлениях, но на первом месте всегда всеже предлагаю держать человеческий фактор

benya еще не придумали ничего сложнее html

benya 21-02-2006 12:52 409034

E-mail,
На счет последнего сообщения - как раз наоборот.
Код:

еще не придумали ничего сложнее html
Чушь! Потому что никто не придерживается стандартов. Нет чего-то, что бы все контролировать. Есть только рекомендации... Все делают как хочется и как нравится ;)

Vlad Drakula 21-02-2006 21:48 409250

mar

PHP код:

// запрашиваем список программ
$List mysql_query('SELECT *
                       FROM program
                            '
.$where2.'
                   ORDER BY Date DESC
                      LIMIT '
.$_REQUEST['start'].', 15;') or print mysql_error() ;

// выводим список программ
$SoftNews='<news>';
while( 
$Item mysql_fetch_assoc($List) )
{
  
$Item['DateString']=date('j'strtotime($Item['Date'])).' '.$M[date('n'strtotime($Item['Date']))];
  
$SoftNews .='<program>';

  if(
$Item['Size'] < 1024)
    
$Item['Size'] = $Item['Size'].' КБ';
  else
    
$Item['Size'] = round($Item['Size']/10241).' МБ';

  foreach(
$Item as $name => $value)
    
$SoftNews .='<'.$name.'><![CDATA['.$value.']]></'.$name.'>';
  
$SoftNews .='</program>';
}

$SoftNews .='</news>';

...

xml2html($XML0); 

вот и весь кусок кода который за это отвечет.

Vlad Drakula 21-02-2006 21:50 409251

E-mail
а что ты понимаешь под человеческим фактором?

benya
Цитата:

Чушь! Потому что никто не придерживается стандартов. Нет чего-то, что бы все контролировать. Есть только рекомендации... Все
делают как хочется и как нравится
полностью с тобой согласен!

E-mail 21-02-2006 22:42 409266

benya причем тут придержка стандартов и сложность?

Vlad Drakula это когда ты пишешь для машин, а не для людей

mar 21-02-2006 23:08 409278

Vlad Drakula
я именно про лишнюю (или дополнительную, как кому приятнее :)) ступень, через которую гонятся еще раз все данные уже выходного файла.

E-mail 22-02-2006 00:05 409305

mar судя по всему у Вас богатый опыт в опщении с субд, а знаете ли Вы, увааемая мной девушка, о такой СУБД как Cache? :)

в отличии от оракла и других организаторов данных реляцией таблиц, у нее реляция xml :)

бытует мнение что представление данных в виде документа для человека естественней, чем в виде реляций таблиц.

E-mail 22-02-2006 00:13 409311

и тут приходит на помощ такой язык оформления как xsl, который задает любой вид приятный пользователю, но уже в рамках документа.

при этом все рамки для бд великого Кодда о том, что же есть такое Реляционная модель на грани краха.


mar 22-02-2006 00:29 409318

E-mail
куда-то тебя не туда понесло. Cache относится к постреляционным базам данным, там задействована модель Online Transaction Processing, используется система многомерных данных, объектная система и т.д и т.п. (Если есть желание поговорить о математике, то лучше в отдельном топике и позвав кого-нибудь из активных математиков :))
Кроме того там реальзован объектный доступ и масса интерфейсных хвостиков. Вот отдним из таких хвостиков (и не более) и является xml. Т.е. ни в коем случае не хранение данных в xml, а полноценная поддержка и трансформация напрямую в объекты Cache и обратно.
что-то много народу помледние дни поминают Cache всуе. Не далее, как на днях на сайте вакансий некий супеумный рекрутер требовал от разработчиков баз данных знания Squid Cache. До меня тогда даже не сразу дошло в чем дело :)

vadimiron 22-02-2006 00:44 409325

В Cache вроде всё равно всё идет через SQL

vadimiron 22-02-2006 01:08 409330

mar, Squid Cache может быть вот это http://www.squid-cache.org/ :)

mar 22-02-2006 01:37 409335

vadimiron
а куда же без него :) Но sql (по крайней мере как язык для нас, а не его реализация в СУБД) по-моему, все-таки напрямую не связан с реляционной алгеброй (т.е. со способом организации хранения данных).
Куда-то нас от XML + XSLT + XSL явно уносит :) Если так будет продолжаться, пирдется выделить ветку под СУБД :)

mar 22-02-2006 02:10 409339

предыдущее было ответ на sql
По поводу сквида - конечно :) По крайней мере мне другой не попадаося =)
А HR-manager просто слышал звон, как всегда начиняя требования по вакансиям умными словами :)

Vlad Drakula 22-02-2006 11:39 409467

народ не уклоняемся то темы!!!

mar
а что за лишние элемены ты увидила в приведенным мной алгоритме?

E-mail 22-02-2006 19:31 409683

mar мне остается встать на защиту бедного hr-менеджера, поскольку не вижу ничего страшного в том что sql можно связать с реляционной алгеброй. по сути язык и является реляцией по канонам алгебры, во как завязал, а поповоду каше и сквида, просто однофамильцы, и как мне кажется Вы уважаемая девушка их перепутали :)

почему вспомнил про каше, так только по тому что вывод из бызы формируется уже в xml, соответственно остается использовать только xsl и php

E-mail 22-02-2006 19:33 409687

Vlad Drakula примеров от тебя никаких не жду, но обещание есть обещание, смотри всю ветку..

разговор поддерживаю чисто из любопытства рынка и маркетологических иследований не связанных с рынком :)

mar 22-02-2006 20:05 409705

E-mail
:flood:
Вы поняли что сказали? Объясняю на пальцах
1) ответ про SQL относился к ПЕРВОМУ вопросу vadimiron: "В Cache вроде всё равно всё идет через SQL" и никакого отношения к HR и прочим отвлеченным шуткам не имеет (просто он запостил вопрос про сквид пока я писала ответ про sql)
2) ЦЕЛОЕ НАЗВАНИЕ базы данных и ВТОРОЕ СЛОВО в названии proxy-сервера действительно общие. HR употребил(а) ПОЛНОЕ НАЗВАНИЕ proxy-сервера (а не второе слово) (тем самым показав, что не знает сути ни того, нидруго, а просто пользуется умными it-словами)
3) мне было бы достаточно трудно перепутать вещи, которые я знаю одно - теоретически (за пока еще редким применением в общей практике постреляционных СУБД) (бд), а второе - увы!- на практике (прокси-сервер).
4) Фраза "До меня тогда даже не сразу дошло в чем дело" обозначает, что юмор ситуации дошел не сразу (т.е. не сразу дошло, зачем в предложении такое, казалось бы странное требование)
4) рассказ о HR был выдан по некоей ассоциации с употреблением людьми не совсем знакомых понятий (кто-то выдернул из описание бд "xml" и поставил во главу угла (отчего мне и пришлось пускаться в объяснения), или мне это приснилось? =))

Народ, спрашиваю совета, что делать со всем этим оффтопом? почистить и убрать в отдельную ветку, или пусть лежит, если дальше развиваться не будет? :)

E-mail 23-02-2006 01:07 409806

mar не стоит объясняться, то что это флуд или не флуд это можно отнести к любому месажу, а то что прокси сервер отличается от бд и все остальное, пригодится просто для прочтения обсуждаемого. Мое уважение к Вам в нисколькой мере не снизилось, а Ваш авторитет не упал, попробуйте ради интереса отправить резюме незнающему хр-менеджеру, уверен у Вас большое будущее ;)

Не стоит меня боятся, не стоит объяснять каждое свое выражение - сам - не дурак, нить тяну и слежу за ней :)

и чтобы в завершении никто не подумал что это в не к теме или уж тем более флуд, скажу что знание cache и xml в самых низких уровнях, достаточно ценится на рынке в любом случае:)

я вот кстати сейчас пытаюсь найти литературу по t-sql в виде оффлайн справочника и желательно в формате chm, может у Вас завалялась электронная книженция в этом виде?:)

Vlad Drakula 23-02-2006 11:08 409885

E-mail
я обещал показать сайт в котором XSL используется в качестве шаблонного движка, я показал...
чтобы еще раз воказать мощь XSL я потом выложу ссылки на два сайта которые будут отличаться только одним файлом стиля, и при этом будут иметь достаточно разное оформление, но это быдет потом, а не сейчас...

E-mail
я бы лучьше читал литературу по XSQL а не T-SQL...

vadimiron 23-02-2006 12:41 409942

Ещё одна интересная возможность всей смеси этих технологий: Publishing Systems
Сейчас в инете очень много фирм предлагают такие системы
Я почти уламал на работе использовать чтото подобное, но не совсем
Система выглядит примерно так:

Цель: получить файл PDF либо сразу вывести на печать (имеетсяы в виду различные счета, которые рассылаются клиентам и тп)
Вся информация лежит в базе, мы её достаём в XML (структура которого закреплена в соответствующем DTD)
Также есть к определённому DTD файл XSL-FO, который отвечает за весь дизайн документа и layout
Далее имеем FOP процессор (например от АПАЧа), который генерирует из XML и XSL-FO файлов специальный FO файл, пригодный уже для прямого перевода в PDF
Так как FOP APACHE написан на джаве и и команды джавы можно включить в код PHP, то может получится очень удобная утилита для автоматической Publishing System

Единственное, что моих вышестоящих менеджеров остановило, так это то, что сейчас на рынке нет хорошего визуального редактора XSL-FO файлов. Самый лучший от Altova (Stylevision 2005) их не совсем устроил. Я их пытался убедить, что их можно и от руки писать и что этот редактор достаточен, но они решили попробывать Framemaker от ADOBE, с которым сейчас сами мечаются. Короче жду, как там дальше будет всё происходить

Vlad Drakula 23-02-2006 13:14 409964

vadimiron
верно подмечено, но веть PDFом все не ограничивается есть еще например SVG, RWML, FLASH и т.д. ...

xkspy 05-03-2006 13:42 413968

Подскажите пожалуйста, чайнику...
Как я могу забрать информацию о погоде (RSS), на сервере rp5.ru или gismeteo.ru?

vadimiron 05-03-2006 15:47 413999

X
Нужен RSS Reader. Такие проги уже написаны почти подо все языки, так как они очень лёгкие.
Если нужно забирать для сайта и публиковать на нём, то можно, например на PHP, испольовать magpieRSS

benya 05-03-2006 19:11 414052

Никогда не интересовался "форматом" RSS, похоже что это обычный XML. Красотища. Бери и преобразовывай.

Vlad Drakula 05-03-2006 22:27 414138

X
все как сказал benya

benya 06-03-2006 13:49 414431

Господа, вот наша погода:

Код:

<xsl:apply-templates select="document('pogoda.xml')/rss"/>
<!-- Погода -->
<xsl:template match="channel">
<xsl:for-each select="item">
<xsl:value-of select="title"/><xsl:text>.</xsl:text>
<xsl:variable name="one_liter" select="translate(substring(description,1,1),'ёйцукенгшщзхъфывапролджэячсмитьбю','ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ')"/> <!-- Что-то типа uppercase для первого символа-->
<xsl:value-of select="concat($one_liter,substring(description,2))"/><xsl:text>.</xsl:text>
</xsl:for-each>
</xsl:template>

Запрашиваем погоду и сохраняем:

Код:

#!/usr/bin/perl
use strict;
use LWP::Simple;
my $link="http://informer.gismeteo.ru/rss/33345.xml";
my $pogoda=get $link;
die "Couldn't get it!" unless defined $pogoda;
open (POG, ">xsl/pogoda.xml");
print POG "$pogoda";
close POG;


Vlad Drakula 06-03-2006 14:12 414448

еще отмечу что XSL удобно применять для рисования интерфейсов...

так например пичем осбтрактный леяут для GUI потом применяем XSL и получаем на выходе уже нужный нам HTML

xkspy 08-03-2006 16:05 415248

БОЛЬШОЕ СПАСИБО benya отлично!!!!

Vlad Drakula 22-03-2006 14:04 420505

математические опереции в XSL
Код:

<numbers>
  <x>4</x>
  <y>3.2</y>
  <z>11</z>
</numbers>

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:template match="numbers">
  A. 4 + 3.2        = <xsl:value-of select="x + y"/>
  B. 3.2 - 4        = <xsl:value-of select="y - x"/>
  C. 4 * 3.2        = <xsl:value-of select="x * y"/>
  D. 11/3.2        = <xsl:value-of select="z div y"/>
  E. 4 + 3.2 * 11  = <xsl:value-of select="x+y*z"/>
  F. (4 + 3.2) * 11 = <xsl:value-of select="(x+y)*z"/>
  G. 11 mod 4      = <xsl:value-of select="z mod x"/>
  H. 4 + 3.2 + 11  = <xsl:value-of select="sum(*)"/>
  I. floor(3.2)    = <xsl:value-of select="floor(y)"/>
  J. ceiling(3.2)  = <xsl:value-of select="ceiling(y)"/>
  K. round(3.2)    = <xsl:value-of select="round(y)"/>
  L. 11 + count(*)  = <xsl:value-of select="11+count(*)"/>
  M. 3.2 + string-length("3.2") =
            <xsl:value-of select="y + string-length(y)"/>
  N. 11 + "hello"  = <xsl:value-of select="z + 'hello'"/>
</xsl:template>

</xsl:stylesheet>

 A. 4 + 3.2        = 7.2
  B. 3.2 - 4        = -0.8
  C. 4 * 3.2        = 12.8
  D. 11/3.2        = 3.4375
  E. 4 + 3.2 * 11  = 39.2
  F. (4 + 3.2) * 11 = 79.2
  G. 11 mod 4      = 3
  H. 4 + 3.2 + 11  = 18.2
  I. floor(3.2)    = 3
  J. ceiling(3.2)  = 4
  K. round(3.2)    = 3
  L. 11 + count(*)  = 14
  M. 3.2 + string-length("3.2") = 6.2
  N. 11 + "hello"  = NaN


E-mail 24-03-2006 00:06 421063

Vlad Drakula а ты можешь поддержать техническую беседу ЕЩЕ вот тут? :)

Vlad Drakula 24-03-2006 00:27 421069

E-mail

1) а чего там поддерживать... там ни одной темы даже нету...
2) назвать это "Конференции профессионалов ConF.MyHTML.RU" у меня язык не повернется... креатив в дизайне есть... но вот верстал не профессионал... виден ряд ляпов... (как "Конференция профессионалов" может быть сделана не пофессионально???)

E-mail 24-03-2006 21:31 421424

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

benya 04-04-2006 13:51 424766

Влад, какие должны быть права достпупа у файлов *.xsl? Какого-то фига на хостинге инструкция <xsl:import href="va.xsl"/> вызывает ошибку.

Vlad Drakula 04-04-2006 14:06 424771

benya
у меня и на локалке она выдает ошибку, дело скорее всего не в правах доступа а в "разрешении пути до файла", а проще говоря не там он его ищет...

benya 04-04-2006 14:18 424773

У меня на локалке все нормально. А как решить??
Инструкция import и include выдают ошибку.
Я уже затрхал хостера. Выручай!!

Ошибка в логах:
[Tue Apr 04 13:08:33 2006] [error] [client 80.84.190.152] compilation error: file xsl/test.xsl line 18 element include
[Tue Apr 04 13:08:33 2006] [error] [client 80.84.190.152] xsl:include : unable to load xsl/ix.xsl


Все же правильно, почему так?

Vlad Drakula 04-04-2006 15:00 424791

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

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

benya 04-04-2006 15:12 424797

Это не решение. Влить со всех шаблонов в один. Там не одна тысяча строк будет :shout: :swoon:

Vlad Drakula 04-04-2006 15:35 424809

benya
а почему нет?
есть такое правило "шаблон который в два раза короче работает быстрее" "один шаблон работает быстрее чем два"
для этих целей и создается скрипты для деплоя проекта на сервер...

benya 04-04-2006 16:37 424848

Зачем какие-то исключения если должно работать все нормально?
Теряются все преимущества. Это лажа. Еще и document('file.xml') тоже не работает. ;(

benya 05-04-2006 13:10 425157

Vlad Drakula
А как ты обходишься без document()?
Кстати глянь свежим глазом на это:
http://groups.google.ru/group/linux....e6317c86eb1d18
Вот она проблема!! Только как решить?

Vlad Drakula 05-04-2006 13:50 425178

benya
1) в однм месте оно мне и не нужно.
2) во втором месте есть скрипт деплоя который разрешает все связи между файлами и производит их подготовку к резертыванию на сервере...

benya 05-04-2006 16:12 425233

Это как подробнее....

Vlad Drakula 05-04-2006 16:56 425253

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

benya 05-04-2006 17:58 425269

Ничего не понял. Мультиязычное приложение как собрать без document()? Есть отдельный файл в котором храняться все диагностические сообщения на разных языках. Если оно не работает задача конкретно усложняется. Временные деревья не работают.

P.S. Попробовал собрать все модули (которіе включались с помощью import) и померять производительность... по-мойму ничего не изменилось....

Vlad Drakula 05-04-2006 18:16 425275

benya
а чего в этом сложного?
берем один XSL файл и несколько DTD (со словарями) в момент деплоя все это компилим и получаем несколько XSL файлов.. по отдельному файлу на каждый язык...

benya 05-04-2006 18:47 425278

Да это извращение! Не буду я выкручиваться короче. Достану хостера так, что переставит все библиотеки.. все!

Vlad Drakula 10-04-2006 23:39 426756

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

benya 11-04-2006 13:41 426917

Vlad Drakula,
Лучше все же ковыряться, в маленьких файлах-шаблончиках который соответствует разделу, чем в одном большом в одной куче. У меня путаница конкретная. 2339 строк это иголка в стоге сена.

Vlad Drakula 11-04-2006 16:51 426970

benya
нужно использовать соответствующие редакторы

E-mail 11-04-2006 23:14 427058

benya абсолютно согласен, но только разделением тоже лутше не увлекаться (смотри тему тройной select) :)

benya 13-04-2006 00:01 427356

Vlad Drakula,
Ну до бага с импортами у меня все прекрасно было разбито по небольшим "шаблончикам" которые соответствовали каждому разделу сайта. А теперь все в большой куче.
Я и пользуюсь соответсвующим редактором - только ставить якоря - переучиваться нужно.

Vlad Drakula 13-04-2006 00:17 427359

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

benya 13-04-2006 15:07 427526

Vlad Drakula,
А что за софт?

У меня есть breakpoint - можно поставить точку в определенное место и назначить ей имя. Таким образом можно легко перемещаться.

Vlad Drakula 13-04-2006 15:32 427531

benya
XmlSpy - более удобной штуки для редактирования XML/XSL я не встречал...

benya 13-04-2006 19:33 427592

Vlad Drakula,
Меня и komodo устраивает вполне. Переключаться между окнами не очень удобно особенно если в процессе работы этих окон с десяток.

Vlad Drakula 14-04-2006 10:27 427753

benya
в каком плане "Переключаться между окнами не очень удобно особенно если в процессе работы этих окон с десяток." ?

Vlad Drakula 01-05-2006 11:11 433119

к вопросу о гибкости XSL...
вот обещаный пример организации псевдо статики с помощью XSL шаблона: http://soft.oszone.net/

Vlad Drakula 29-05-2006 00:50 443579

вот сейчас сел изучать: schema/wsdl (XSD)
на самом деле все бонально, нужно создать документацию и валидацию к имеющимся XSL шаблонам... вот и встал выбор XSD или DTD...
сижу изучаю...

Vlad Drakula 29-05-2006 12:39 443733

как выяснилось создавать schema/wsdl (XSD) очень просто... я просто не заметил одной галочки в XMLSpy... очень удобно и очень просто!!!!

vadimiron 02-06-2006 12:41 445558

Есть в XML возможность динамически подключать другой файл со стилями??
include, import не принимают переменных

Задача такая: есть список объектов, он не изменеятся, а вот layout самих объектов зависит от параметра
То есть у меня есть один xsl с описанием списка, и несколько для описания типов объектов в этом списке

Vlad Drakula 02-06-2006 12:52 445567

vadimiron
используй просто разные моды преобразования...

vadimiron 02-06-2006 12:54 445568

а что значит моды преобразования??
просто всё в xsl:if засунуть??

Vlad Drakula 02-06-2006 13:01 445571

vadimiron

есть такая штука:

PHP код:

<xsl:apply-templates select="*" mode="*"/>
<
xsl:template match="*" mode="*"/> 

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

vadimiron 02-06-2006 13:16 445579

А как это нужно применять в моём случае? Всё равно переменные нигде не принимаются
Тип объекта, а значит и его xsl, лежит в глобальной переменной

Я пока только до такого дошёл
HTML код:

<xsl:choose>
            <xsl:when test="$gt=image"><xsl:apply-templates mode="image"/></xsl:when>
            <xsl:when test="$gt=audio"><xsl:apply-templates mode="audio"/></xsl:when>
          </xsl:choose>


Vlad Drakula 02-06-2006 13:21 445583

vadimiron
вот к примеру здесь: http://soft.oszone.net/
есть нода programm она одна и таже на всех страницах, и XSL файл один и тот же...
но веть отображаются по разнаму в зависимости от того какой тип страницы показывается...

vadimiron 02-06-2006 13:36 445589

Честно говоря, там я только XTML код вижу, но не XSL
Я понимаю как использовать mode, но я не понимаю только одного, как я могу выбирать mode в зависимости от переменной
xsl:apply-templates всё равно не разрешает mode как переменная

Vlad Drakula 02-06-2006 13:52 445599

vadimiron
Цитата:

Честно говоря, там я только XTML код вижу, но не XSL
логично... т.к. ты видишь лошь результат XSL преобразования...

Цитата:

Я понимаю как использовать mode, но я не понимаю только одного, как я могу выбирать mode в зависимости от переменной
xsl:apply-templates всё равно не разрешает mode как переменная
как на счет такого решения:

PHP код:

<xsl:choose>
    <
xsl:when test="*">
        <
xsl:apply-templates select="*" mode="*"/>
    </
xsl:when>
    <
xsl:when test="*">
        <
xsl:apply-templates select="*" mode="*"/>
    </
xsl:when>
    <
xsl:when test="*">
        <
xsl:apply-templates select="*" mode="*"/>
    </
xsl:when>
    <
xsl:when test="*">
        <
xsl:apply-templates select="*" mode="*"/>
    </
xsl:when>
    <
xsl:otherwise>
        <
xsl:apply-templates select="*" mode="*"/>
    </
xsl:otherwise>
</
xsl:choose


vadimiron 02-06-2006 13:56 445602

Ну да, в общем то я так и сделал (мой пост выше) :)

Vlad Drakula 02-06-2006 14:01 445605

vadimiron
Цитата:

Ну да, в общем то я так и сделал (мой пост выше)
чего то я прогладел...

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

Vlad Drakula 03-06-2006 23:18 446105

к вопросу vadimiron о передаче параметров в шаблон, решил поделиться своими наработками...

когда в шаблон нужно передовать много информации ее наверное лучьше писывать просто отдельный "спец" блоком во входной XML тогда это позволит на много шире использовать ее в XPath запросах!

PS
vadimiron
и как раз решит твою проьлему с большим колличеством свичей для разных мод...

Vlad Drakula 12-06-2006 17:34 449778

тут возникал вопрос о том как можно выдирать какиенибуть данные из XML, и нашол следуещее решение:

PHP код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<xsl:output method="text"/>
<xsl:template match="/">
    <xsl:for-each select="//node()[name() = 'country']">
        <xsl:value-of select="concat('$countryDirs[] = &quot;', @name, '&quot;;')"/>        
    </xsl:for-each>
    <xsl:for-each select="//node()[name() = 'info']">
        <xsl:value-of select="concat('$infoDirs[] = &quot;', ./../../node()/@name, '/', @name, '&quot;;')"/>        
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

PHP код:

<?
function xml2html($f1$f2$debug 0)
{
  
$XML implode (''file($f1));
  
$XSL implode (''file($f2));

  
$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)
    {
      return 
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);
}

eval(
xml2html('./geo.xml''./geo1.xslt'));
?>
<pre>
<?
print_r
($countryDirs);
print_r($infoDirs);
?>
</pre>

вроде все очень просто и понятно...

3kLiN 03-08-2006 23:03 468043

судя по информации на сайте php.net с php5 библиотека XSLT на основе анализатора sablotron не поставляется :(
поставляется некотоый аналог - ОО-мая библиотека XSL на основе libxslt . кто пользуется таковой или все на php4 сидят? приведи простенький примерчик кода, plz

benya 04-08-2006 11:31 468201

3kLiN
А что есть большая разница? Эти библиотеки делают одно и тоже. Там только поменять небольшой кусочек в PHP где происходит трансформация.

3kLiN 04-08-2006 12:27 468236

benya, да, thnx. я уже нашёл примерчик. в XSL нужно ещё создавать DomDocument`ы. это и сбило с толку поначалу. спасибо php.net за наше счастливое детство :)

3kLiN 04-08-2006 17:50 468372

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

benya 12-08-2006 17:11 471315

3kLiN
А я как раз несколько месяцев назад делал тоже самое. Сделал нечто такого:

PHP код:

<!-- СТРАНИЦЫ -->
<
xsl:template match="pages" mode="pages">
        <
xsl:variable name="count" select="3"/>
        <
xsl:variable name="sel" select="@sel"/>
        <
xsl:variable name="item" select="item[position() = $sel]"/>
        <
xsl:variable name="items" select="$item/preceding-sibling::item[position() &lt;= $count]| $item | $item/following-sibling::item[position() &lt;= $count]"/>
        <
xsl:variable name="last" select="count(item)"/>
        <
xsl:variable name="allmess" select="@allmess"/>
        <
xsl:variable name="mess" select="@mess"/>
        <
xsl:if test="$last > 1">
            <
table border="0" cellspacing="1" cellpadding="0">
                <
tr>
                    <
td>
                        <
span class="lang_link1">
                            <
xsl:value-of select="concat('Страница',' ',$sel,' ','из',' ',$last)"/>
                            <
xsl:text> </xsl:text>
                        </
span>
                    </
td>
                    <
xsl:if test="not($sel = '1')">
                        <
td>
                            <
a href="page.html" class="page" title="На первую страницу">««</a>
                        </
td>
                    </
xsl:if>
                    <
xsl:if test="not($sel = '1')">
                        <
td>
                            <
a href="page{$sel - 1}.html" class="page" title="Предыдущая страница ({$sel - 1})">«</a>
                        </
td>
                    </
xsl:if>
                    <
xsl:for-each select="$items">
                        <
xsl:variable name="pos">
                            <
xsl:number/>
                        </
xsl:variable>
                        <
xsl:variable name="to" select="($pos * $mess) - $mess"/>
                        <
xsl:variable name="a" select="($sel * $mess) div $mess + 1"/>
                        <
xsl:variable name="psst" select="$to + 1"/>
                        <
xsl:variable name="psend" select="$psst + ($mess - 1)"/>
                        <
td>
                            <
a>
                                <
xsl:attribute name="title"><xsl:choose><xsl:when test="$a != $pos"><xsl:choose><xsl:when test="$allmess = $psst"><xsl:value-of select="concat('Страница',' ',$pos,' ','(',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:when test="$psend > $allmess"><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:otherwise><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$psend,' ','из',' ',$allmess,')')"/></xsl:otherwise></xsl:choose></xsl:when><xsl:when test="$allmess = $psst"><xsl:value-of select="concat('Страница',' ',$pos,' ','(',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:when test="$psend > $allmess"><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$allmess,' ','из',' ',$allmess,')')"/></xsl:when><xsl:otherwise><xsl:value-of select="concat('Страница',' ',$pos,' ','(','с',' ',$psst,' ','по',' ',$psend,' ','из',' ',$allmess,')')"/></xsl:otherwise></xsl:choose></xsl:attribute>
                                <
xsl:attribute name="href"><xsl:value-of select="concat('page',$pos,'.html')"/></xsl:attribute>
                                <
xsl:attribute name="class"><xsl:choose><xsl:when test="$pos = $sel">page-a</xsl:when><xsl:otherwise>page</xsl:otherwise></xsl:choose></xsl:attribute>
                                <
xsl:value-of select="$pos"/>
                            </
a>
                        </
td>
                    </
xsl:for-each>
                    <
xsl:if test="not($sel = $last)">
                        <
td>
                            <
a href="page{$sel + 1}.html" class="page" title="Следующая страница ({$sel + 1})">»</a>
                        </
td>
                    </
xsl:if>
                    <
xsl:if test="not($sel = $last)">
                        <
td>
                            <
a href="page{$last}.html" class="page" title="Последняя страница ({$last})">»»</a>
                        </
td>
                    </
xsl:if>
                </
tr>
            </
table>
        </
xsl:if>
    </
xsl:template>
<!-- 
СТРАНИЦЫ --> 

Лишнюю HTML разметку можно выкинуть ;)

На вход нужно подать вот такую структуру XML:
PHP код:

<pages sel="1" allmess="41" mess="5">
        <
item/>
        <
item/>
        <
item/>
        <
item/>
        <
item/>
        <
item/>
        <
item/>
        <
item/>
        <
item/>
    </
pages


Вызывается как-то так:
PHP код:

<xsl:apply-templates select="pages" mode="pages"/> 

Не факт что мой пример правильный с точки зрения производительности, правильности и тд. Наша профессура из форума может начинать критиковать :tease:
Можно было и XML попроще передать. Но...пример работает и я не заморачивался.
Результат: тоже самое - список пейджей как на этом форуме.

Vlad Drakula 12-08-2006 23:26 471366

чтож представлю свой вариант решения этой задачи...

на входе:
PHP код:

<pages sel="2" mess="2">
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
    <
item/>
</
pages

шаблон:
PHP код:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <
xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <
xsl:template match="/">
        <
xsl:call-template name="nav"/>
    </
xsl:template>
    <
xsl:template name="nav">
        <
xsl:apply-templates select="//pages" mode="nav"/>
    </
xsl:template>
    <
xsl:template match="pages" mode="nav">
        <
xsl:variable name="start" select="@sel - @mess"/>
        <
xsl:variable name="end" select="@sel + @mess"/>
        <
xsl:variable name="prev" select="@sel - 1"/>        
        <
xsl:variable name="next" select="@sel + 1"/>        
        <
xsl:variable name="all" select="count(item)"/>
        <
table border="1">
            <
tbody>
            <
tr>
                <
td>
                    <
xsl:value-of select="concat(@sel, ' of ', $all)"/>
                </
td>
                <
xsl:if test="@sel != 1">
                    <
xsl:apply-templates select="item[1]" mode="nav_f" />                    
                    <
xsl:apply-templates select="item[$prev]" mode="nav_p" />                    
                </
xsl:if>
                <
xsl:apply-templates select="item[position() &gt;= $start and position() &lt;= $end]" mode="nav" />
                <
xsl:if test="$end &lt; $all">
                    <
xsl:apply-templates select="item[$next]" mode="nav_n" />                    
                    <
xsl:apply-templates select="item[$all]" mode="nav_l" />                    
                </
xsl:if>
            </
tr>
            </
tbody>
        </
table>
    </
xsl:template>
    <
xsl:template match="item" mode="nav">
        <
td>
            <
xsl:value-of select="position()"/>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_f">
        <
td>
            <
xsl:text>f</xsl:text>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_l">
        <
td>
            <
xsl:text>last</xsl:text>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_p">
        <
td>
            <
xsl:text>&lt;</xsl:text>
        </
td>
    </
xsl:template>
    <
xsl:template match="item" mode="nav_n">
        <
td>
            <
xsl:text>&gt;</xsl:text>
        </
td>
    </
xsl:template>
</
xsl:stylesheet

benya
вы бы хоть предупредели что ваш шаблон использует XSL2.0

<xsl:variable name="item" select="item[position() = $sel]"/> - этого в XSL1.0 вроде как нету... там переменные только текстовые...

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

E-mail 12-08-2006 23:52 471372

http://tex.msu.ru/works/mmlbrowsers/
http://tex.msu.ru/works/mmlbrowsers/test.xhtml

попробЫвал я в фаерфоксе 1506 открыть, отображает только исходный код, непойму откуда взялись эти скриншоты, или надо произвести какието настройки браузеру? плагины?

В ie sp2 хоть выдает ошибку The XML page cannot be displayed :)

opera 901 аналагично лисице(

хотя наверное все дело в content-type.

3kLiN 13-08-2006 00:08 471374

benya, Vlad Drakula, спасибо за примеры, но я уже решил с помощью рекурсивных вызовов <xsl:call-template ... />

benya 13-08-2006 12:31 471446

Vlad Drakula,
XSL2.0 вроде как нету, а с библиотекой LibXSLT 1.0 вроде как работает ;)

И что за очевидные баги ты заметил?

Vlad Drakula 14-08-2006 23:11 472055

benya
Цитата:

И что за очевидные баги ты заметил?
а... у тебя были не заменены "<" на "&lt;"

Цитата:

XSL2.0 вроде как нету, а с библиотекой LibXSLT 1.0 вроде как работает
а к примеру MSXml наверное не скушает...
ноды как параметры передавать может но как переменные нет... поддержка полноценных переменных появилось лишь в XSLT2.0 (в стандарте)

просто мне пришлось как то проводить сравнения меджу возможностями XSLT1.0 и XSLT2.0

3kLiN
рекурсия это в принцепе хорошо... при использовании XSLT ей нужно хорошо владеть иначе никак... но для такой задачи по моему это как из пушки по воробьям... нужно еще задумываться и о перфомансе приложения!


в связи с тем что тема пейджинга оказалась интересна привожу еще один шаблон... решение достаточно элегантное:
PHP код:

<xsl:template name="pages">
        <
xsl:param name="pages" select="ceiling(count(//news) div 15)"/>
        <
xsl:param name="page" select="2"/>
        <
xsl:text>&#160;| </xsl:text>
        
<a href="./news{$page}.html">
            <
xsl:value-of select="$page"/>
        </
a>
        <
xsl:if test="$page &lt; $pages">
            <
xsl:call-template name="pages">
                <
xsl:with-param name="pages" select="$pages"/>
                <
xsl:with-param name="page" select="$page + 1"/>
            </
xsl:call-template>
        </
xsl:if>
    </
xsl:template

вот к приму у вас есть набор новостей вам их нужно разбирать на страницы по 15 новостей на страницу...

вызывается шаблон следующим образом:

PHP код:

<fieldset>
                                    <
legend>Страницы:</legend>
                                    <
a href="./index.html">
                                        <
b>1</b>
                                    </
a>
                                    <
xsl:call-template name="pages"/>
                                </
fieldset

E-mail
Цитата:

Решением этой проблемы может служить использование специальных XSLT-стилей "XSLT stylesheets for MathML". Такой подход возможен, так как поддержка XSLT-трансформаций встроена в браузер. Для этого надо скачать набор XSLT-стилей и в первой строчке нашей страницы указать ссылку на заглавный файл mathml.xsl:

<?xml-stylesheet type="text/xsl" href="mathml.xsl"?>

benya 15-08-2006 19:54 472558

Vlad Drakula,
Кстати, я тоже как-то хотел так сделать, но вызывание теплейта из самого темплейта у меня вызывает ошибку, хотя в книгах это широко используют. Поэтому пришлось от такого метода отказаться.

Vlad Drakula 16-08-2006 10:35 472788

benya
Цитата:

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

benya 16-08-2006 12:21 472850

Vlad Drakula,
Как не правильный? LibXSLT какая-то последняя версия ;) А примеры переписывал из книги. Даже простой пример пробовал сгенерировать количество элментов в зависимости от от количества в переменной (практически тоже самое что и твой последний пример со страницами). Не катит!
На днях попробую еще раз, и напишу что за ошибка.

benya 17-08-2006 13:25 473461

Vlad Drakula,
Цитата:

а... у тебя были не заменены "<" на "<"
Форум подрезал ;)

Кста, а что бы последний пример работал, во входном XML должны быть ВСЕ новости? А если их там 100? Или как?


Vlad Drakula 17-08-2006 13:31 473467

benya
да... чтобы последний пример работал там должны быть все новости...
у меня из около 70 и ничего работает... правда у меня генерится статический HTML с помощью C++...

benya 17-08-2006 13:35 473471

Vlad Drakula,
Там легко его приспособить ;) Странно, но работает, раньше что-то не так делал наверное. Так или иначе, мой первый вариант устраивает меня больше.

3kLiN 18-08-2006 20:04 474193

Цитата:

Цитата Vlad Dracula
рекурсия это в принцепе хорошо... при использовании XSLT ей нужно хорошо владеть иначе никак... но для такой задачи по моему это как из пушки по воробьям... нужно еще задумываться и о перфомансе приложения!

свою задачу с пейджингом решил так:
PHP код:

<xsl:template name="pager">
  <
xsl:param name="i" />
  <
xsl:param name="n" />
  <
xsl:param name="max" />

  <
xsl:if test="$i > 0 and $i <= $n and $i <= $max">
    <
xsl:choose>
      <
xsl:when test="$i = pagenum">
        <
xsl:value-of select="$i" />
      </
xsl:when>
      <
xsl:otherwise>
        <
a href="?p={$i}">
          <
xsl:value-of select="$i" />
        </
a>
      </
xsl:otherwise>
    </
xsl:choose>
  </
xsl:if> 

  <
xsl:if test="$i < $n">
    <
xsl:call-template name="pager">
      <
xsl:with-param name="i" select="$i + 1"/>
      <
xsl:with-param name="n" select="$n"/>
      <
xsl:with-param name="max" select="$max"/>
    </
xsl:call-template>
  </
xsl:if>

</
xsl:template

имеем исходный xml:
PHP код:

<pagenum>2</pagenum>
<
item-per-page>20</item-per-page>
<
items>400</items

тогда вызываем так:
PHP код:

<xsl:text>Страницы: </xsl:text>
  <
xsl:call-template name="pager">
    <
xsl:with-param name="i" select="pagenum - 5"/>
    <
xsl:with-param name="n" select="pagenum + 5"/>
    <
xsl:with-param name="max" select="ceiling(items div item-per-page)"/>
  </
xsl:call-template

может с рекурсией не самое элегантное решение. кто подскажет лучше - с удовольствием изменю :)

Vlad Drakula 18-08-2006 22:07 474238

3kLiN
на мой взгля очень не оптимально... на вскидку могу сказать что можно избавиться от трех сравнений на каждую итерацию!
а если еще подумать то и еще одно ставнение можно выкинуть... но это уже не так криточно...

так что поробуйте еще подумать... может появятся идеи о более эффективных алгоритмах.

3kLiN 19-11-2006 01:41 513978

есть известный узел содержащий имя искомого узла. как вывести содержание искомого узла?
пока ничего красивее
HTML код:

<xsl:value-of select="* [ name(.) = node1 ]" />
не придумал. может есть элегантнее решение?

Vlad Drakula 19-11-2006 18:23 514177

3kLiN
мне вот кажется что приведенный вами код не работает...

3kLiN 19-11-2006 22:16 514252

Vlad Drakula
у меня работает. а что с ним не так? я от более простого варианта не отказался бы :)

sen1983 29-11-2006 13:38 518411

У меня такой вопрос:
Есть следующая задача:
Работа с базой данных. Хранимые процедуры возвращают XML. С помощью XSLT я его преобразую в HTML. Вопрос такой: каким образом в страницу можно добавить динамику (пейджинг, фильтры поиска и.т.д.)
Надо чтобы работало как минимум под FF и IE.
Можете посоветовать, в каком направлении копать. А то я чегото в полной растерянности.
PS: Предположительн все это нужно организовать через Ajax. Исходная тнформация поcтупает c сервера через XMLHTTPRequest.

Vlad Drakula 14-12-2006 13:57 524663

sen1983
Цитата:

С помощью XSLT я его преобразую в HTML
на стороне сервера или на стороне клиента.

Цитата:

Предположительн все это нужно организовать через Ajax
а это как минимум 30к JS кода в качестве библиотек.

Цитата:

Вопрос такой: каким образом в страницу можно добавить динамику (пейджинг, фильтры поиска и.т.д.)
каков предполагаемый объем данных?

собственно здесь: soft.oszone.net выборки идут в XML а потом трансформятся с помощью XSL но юзер этого в принцепе и не замечает.

ЗЫ
честно говоря я непонимаю в чем суть вопроса.

sen1983 22-12-2006 16:45 528031

Vlad Drakula
Вопрос я решил.
С сервера зачитывалось два XML документа - один - XSL , другой - исходные данные. "Склеивал" их на клиенте.
Не скажу, что потребовалось очень много Javascript кода для работы через XMLHTTPRequest. Тестировал только для FF и IE. Работает нормально.
Суть вопроса была в том, что я думал, что получится написать такую хитрую XSL табличку, которая будет через переданные ей параметры отсекать ненужные результаты из исходного XML документа и формировать пейджинг. Но мне показалось, что это будет долговато это писать. и в итоге от этой идеи я отказался.
ЗЫ: Спасибо за отклик.

Vlad Drakula 28-12-2006 12:23 530107

sen1983
какую библиотеку вы использовали для XSL и XML ?

sen1983 28-12-2006 16:16 530171

Vlad Drakula
Я не использовал сторонних библиотек. Для работы с XMLHTTPRequest я частично использовал исходники к книге "Ajax в действии". В этой книге вроде и библиотека есть. Для слияния XML файла с XSL таблицей и вывода HTML кода в браузер написал не очень длинную функцию, заточенную под IE и FF. Если интересно, могу попозже выложить исходники.

Vlad Drakula 28-12-2006 16:45 530181

sen1983
а какой смыл было делать XSL преобразование на клиенте, по мимо экономии трафика и процессора сервера?

sen1983 28-12-2006 17:23 530186

Vlad Drakula
Больше никакого.Разве что присутствует более менее четкое представление MVC... Четко видно, где данные, где разметка, и где код, который данными управляет. Но это больше для разработчика.
Вообще основной задачей было вынесение максимально возможного объема функциональности на сторону клиента. На данный момент на сервере даже сессии нет. все, что нужно, хранится в объектах JavaScript классов. Сервер не генерит ни одной страницы, а только работает с БД.
Но стоит отметить, что JavaScript делает XSL преобразования не так уж быстро. Видна задержка в полсекунды а то и в секунду.

Vlad Drakula 29-12-2006 14:01 530463

sen1983
собственно вы решили писать тонкий клиент на AJAX
тогда предлагаю перенести дискуссию сюда: http://forum.oszone.net/thread-46763.html

E-mail 04-03-2007 21:25 557926

вот создал два файла:

planets.xml

PHP код:

<?xml version="1.0"?>
<?xml
-stylesheet type="text/xsl" href="planets.xsl"?>
<PLANETS>
  <PLANET>
    <NAME>Mercury</NAME>
    <MASS UNITS="(Earth = 1)">.0553</MASS>
    <DAY UNITS="days">58.65</DAY>
    <RADIUS UNITS="miles">1516</RADIUS>
    <DENSITY UNITS="(Earth = 1)">.983</DENSITY>
    <DISTANCE UNITS="million miles">43.4</DISTANCE><!--At perihelion-->
  </PLANET>
  <PLANET>
    <NAME>Venus</NAME>
    <MASS UNITS="(Earth = 1)">.815</MASS>
    <DAY UNITS="days">116.75</DAY>
    <RADIUS UNITS="miles">3716</RADIUS>
    <DENSITY UNITS="(Earth = 1)">.943</DENSITY>
    <DISTANCE UNITS="million miles">66.8</DISTANCE><!--At perihelion-->
  </PLANET>
  <PLANET>
    <NAME>Earth</NAME>
    <MASS UNITS="(Earth = 1)">1</MASS>
    <DAY UNITS="days">1</DAY>
    <RADIUS UNITS="miles">2107</RADIUS>
    <DENSITY UNITS="(Earth = 1)">1</DENSITY>
    <DISTANCE UNITS="million miles">128.4</DISTANCE><!--At perihelion-->
  </PLANET>
</PLANETS>

planets.xsl

PHP код:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
    <xsl:template match="/">
        <HTML>
            <HEAD>
                <TITLE>The Planets Table</TITLE>
            </HEAD>
            <BODY>
                <H1>The Planets Table</H1>
                <TABLE BORDER="2">
                    <TR>
                        <TD>Name</TD>
                        <TD>Mass</TD>
                        <TD>Radius</TD>
                        <TD>Day</TD>
                    </TR>
                    <xsl:apply-templates/>
                </TABLE>
            </BODY>
        </HTML>
    </xsl:template>
    <xsl:template match="PLANETS">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="PLANET">
        <TR>
            <TD><xsl:value-of select="NAME"/></TD>
            <TD><xsl:value-of select="MASS"/></TD>
            <TD><xsl:value-of select="RADIUS"/></TD>
            <TD><xsl:value-of select="DAY"/></TD>
        </TR>
    </xsl:template>
</xsl:stylesheet>


при открытии первого ie6 все нормально - видна табличка как надо, а при открытии ff пишет вот такое:

PHP код:

<parsererror xmlns="http://www.mozilla.org/newlayout/xml/parsererror.xml">Ошибка загрузки таблицы стилейОшибка разбора таблицы стилей XSLT.</parsererror

при открытии Оперой, такое:
PHP код:

XSLT processing failed

в чем ошибка?
и для чего нужно UNITS="(Earth = 1)" ?:)

Vlad Drakula 05-03-2007 12:50 558097

E-mail
Цитата:

для чего нужно UNITS="(Earth = 1)"
сами создали и не знаете что?
(Earth = 1) - задает единици измерения
<DENSITY UNITS="(Earth = 1)">.983</DENSITY> - означает что протность равна .983 от плотности земли

E-mail 06-03-2007 01:49 558327

Vlad Drakula а ошибки изза чего?

EvgeniyQQQ 27-03-2007 13:00 566996

Добрый день. Помогите пожалуйста.
Есть xml и xsl файлы. Соединяю их в fo-файл. Полученный файлик преобразую в PDF с помощью FOP-процессора Apache FOP.
Проблема состоит в том, что в получившемся pdf-документе символы русского алфавита меняются на #.
Почему так, не знаю. С английским всё ok. Менял кодировку, непомогло.

mar 27-03-2007 13:36 567007

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

EvgeniyQQQ 27-03-2007 15:54 567070

mar
Поясните пожалуйста, что означат выражение:
Цитата:

отсутствие работающих в pdf шрифтов

mar 27-03-2007 16:54 567095

программа, собирающая pdf должна как-то показать текст. Для этого она использует шрифты, не знаю - системные, или какие-то свои, но судя по результату некирилические.

EvgeniyQQQ 27-03-2007 17:39 567114

mar
При помощи XSL-FO (файл *.xsl) можно указать используемый шрифт. Я указывал Arial, TimeNew Roman, Verdana, бесполезно.

mar 27-03-2007 19:03 567142

EvgeniyQQQ
указать-то можно. Но лично я, не видя документации к программе, не знаю, какие шрифты она подхватывает и откуда. Или проблема вылезает до Pdf-преобразования? Попробуйте проверить это поэтапно.

EvgeniyQQQ 27-03-2007 20:18 567160

mar
Спасибо за помощь. Вы были правы, программа Apache FOP "не знает" шрифтов потдерживающих русский.
Но, её можно "научить" этому. Решение проблемы описано здесь: http://www.javaportal.ru/java/articl...chars.html#fop
Сделал как там написано, всё работает.

mar 27-03-2007 20:53 567171

Все хорошо, что хорошо кончается :)

FADE 12-04-2007 09:16 573321

Vlad Drakula а где вы храните код счетчиков и в каком виде: в бд, в xml или xsl файле?

Vlad Drakula 12-04-2007 09:23 573323

FADE
каких именно счетчиков?

FADE 12-04-2007 10:26 573357

Vlad Drakula hotlog например, spylog и т.п.

Vlad Drakula 12-04-2007 10:50 573378

FADE
а... это зашито в шаблоне, но ент проблема это хранить в базе или другом XSL файле

FADE 24-04-2007 21:20 579064

Народ, а как можно вот это улутшить?

PHP код:

<xsl:template match="item">
        <
xsl:variable name="pos" select="position()"/>
        
        <
xsl:choose>
            <
xsl:when test="$pos=10 or $pos=20 or $pos=30 or $pos=40 or $pos=50 or $pos=60 or $pos=70 or $pos=80 or $pos=90 or $pos=100 or $pos=110 or $pos=120">
                <
xsl:value-of select="item"/><br/>
            </
xsl:when>
            <
xsl:otherwise>
                <
xsl:value-of select="item"/>
            </
xsl:otherwise>
        </
xsl:choose>
        
    </
xsl:template

а то както длинннннннно получилось:)

vadimiron 24-04-2007 22:18 579085

FADE
HTML код:

(position() mod 10)= 0

FADE 24-04-2007 23:36 579113

vadimiron спасип:)

FADE 24-04-2007 23:56 579118

а почему вот это не работает?

PHP код:

<xsl:apply-templates select="$page"/> 

пишет вот это:
Warning: Sablotron error on line 4: expression is not a node set in

что это значит?..

Vlad Drakula 25-04-2007 00:01 579121

FADE
что написано то и значит, вы просто нечитали спецификацию XSL 1.0
приведу отрывок на эту тему: переменная не может содержать node set, apply-templates принимает на вход node set
это ограничение снято в XSL2.0

FADE 25-04-2007 00:58 579134

Vlad Drakulaт.е. если сменить цифру в заголовке с 1 на 2 все заработает?:)

Vlad Drakula 25-04-2007 01:04 579137

FADE
не думаю, т.к. Sablotron по моему не поддреживает XSL2.0 для XSL2.0 нужен саксон...
в XSL2.0 много вкусностей, нопока придется обходится XSL1.0

FADE 25-04-2007 01:22 579141

Vlad Drakula Sablotron - это то чем php преобразует?

Vlad Drakula 25-04-2007 01:52 579149

FADE
примерно так

FADE 01-05-2007 19:15 581786

ясно

FADE 02-05-2007 01:50 581952

а как вывести количество символов? strlength() - пишет что такой функции не существует..

FADE 02-05-2007 04:37 581964

и как вывести элемент <input type="checkbox"> с атрибутом checked если элемент <item>1</item> и если <item>0</item>, вывести без атрибута checkbox??

внутри контейнера <xsl:attribute-set> аказыца запрещены конструкции if, но тогда как???...:(

Vlad Drakula 02-05-2007 11:36 582053

FADE
Цитата:

а как вывести количество символов? strlength() - пишет что такой функции не существует..
вы мануал хоть читали? я же специально приводил ссылку на http://zvon.org/xxl/XSLTreference/Output/index.html
там как раз написано что есть функция string-length

FADE
Цитата:

и как вывести элемент <input type="checkbox"> с атрибутом checked если элемент <item>1</item> и если <item>0</item>, вывести без атрибута checkbox??

внутри контейнера <xsl:attribute-set> аказыца запрещены конструкции if, но тогда как???...
<xsl:if test="./item[text() = '1']">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>

FADE 03-05-2007 17:12 582651

Цитата:

внутри контейнера <xsl:attribute-set> аказыца запрещены конструкции if

Vlad Drakula 03-05-2007 17:52 582670

FADE
я понимаю что это все очень модно, но может вы по простому будете делать?
xsl:attribute-set - не имеет привязки к конеретной ноде...

FADE 03-05-2007 21:21 582743

Vlad Drakula

вот мой код:

PHP код:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="page">
        <form method="post">
<xsl:element name="input" use-attribute-sets="input_update"/>
        </form>
    </xsl:template>
    
    <xsl:attribute-set name="input_update">
        <xsl:attribute name="checked"/>
        <xsl:attribute name="name">update</xsl:attribute>
        <xsl:attribute name="value">1</xsl:attribute>
        <xsl:attribute name="type">checkbox</xsl:attribute>
    </xsl:attribute-set>
</xsl:stylesheet>

вы предлагаете:

PHP код:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="page">
        <form method="post">
<xsl:element name="input" use-attribute-sets="input_update"/>
        </form>
    </xsl:template>
    
    <xsl:attribute-set name="input_update">
<xsl:if test="./item[text() = '1']">
        <xsl:attribute name="checked"/>
</xsl:if>
        <xsl:attribute name="name">update</xsl:attribute>
        <xsl:attribute name="value">1</xsl:attribute>
        <xsl:attribute name="type">checkbox</xsl:attribute>
    </xsl:attribute-set>
</xsl:stylesheet>

ваш вариант - не работает :)

Vlad Drakula 04-05-2007 14:43 583027

FADE
я предлагаю:
PHP код:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="page">
        <form method="post">
<xsl:element name="input" use-attribute-sets="input_update">
<xsl:if test="./item[text() = '1']">
        <xsl:attribute name="checked"/>
</xsl:if>
        <xsl:attribute name="name">update</xsl:attribute>
        <xsl:attribute name="value">1</xsl:attribute>
        <xsl:attribute name="type">checkbox</xsl:attribute>
</xsl:element>
        </form>
    </xsl:template>
</xsl:stylesheet>


FADE 04-05-2007 16:22 583080

Vlad Drakula
а тогда зачем в твоем варианте:
Цитата:

use-attribute-sets="input_update">
?..:)


Vlad Drakula 04-05-2007 17:35 583123

FADE
забыл удалить

FADE 06-05-2007 07:16 583621

а если допустим надо сравнить два значения тега:

так не проходит валидацию:(:

PHP код:

<xsl:if test="item[text() = 'mypear[text()]']"

а так по-моему слишком длинно?

PHP код:

<xsl:variable name="b"><xsl:value-of select="//mypear"/></xsl:variable>
<
xsl:if test="item[text() = $b]"

но работает :)....

что думаете, можно укоротить?:)

FADE 06-05-2007 07:37 583623

все даже еще намного серьездне!

есть куча элементов:
<mypear>
<b>1</b>
<b>2</b>
<b>3</b>
</mypear>

их нужно сранить с <item>2</item> и вслучае если хоть один ему равен ставим атрибут checked ... как??

FADE 06-05-2007 08:18 583624

пока реализовал спомощью форича, внутри которого создается переменная в которую записыввается значение, далее идет проверка, а можно ли обойтись без форича, и реализовать это с помощью xpath , а то слишком много будет элементов?:)

Vlad Drakula 06-05-2007 16:05 583695

FADE
приведите нормальные входные данные:
1) то что есть на входе
2) то что должно быть на выходе

FADE 07-05-2007 04:53 583871

Vlad Drakula
на входе (xml):

PHP код:

<mypear>
<
id>1</id>
<
id>2</id>
<
id>3</id>
<
id>4</id>
<
id>5</id>
</
mypear>

<
check>
<
id>2</id>
<
id>4</id>
<
id>5</id>
</
check

из mypear элементов строится список чекбоксов с соответствующими id, те элементы что в check в случае совпадения id, должны быть отмеченны по умолчанию:)

Цитата:

пока реализовал спомощью форича
по check

Цитата:

, внутри которого создается переменная в которую записыввается значение
check/id

Цитата:

, далее идет проверка
сам форич находится в темплейте для отображения каждого чекбокса mypear/id

Цитата:

, а можно ли обойтись без форича, и реализовать это с помощью xpath , а то слишком много будет элементов?

может быть вот так:

PHP код:

<mypear>
<
id>1</id>
<
id>2</id>
<
id>3</id>
<
id>4</id>
<
id>5</id>
</
mypear>

<
admin>
<
check>
<
id>2</id>
<
id>4</id>
<
id>5</id>
</
check>
</
admin>

<
user>
<
check>
<
id>1</id>
</
check>
</
user>

...

<
guest>
<
check>
<
id>3</id>
<
id>1</id>
<
id>5</id>
</
check>
</
guest


Vlad Drakula 07-05-2007 17:08 584118

FADE
PHP код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:param name="tyle"/>
    <xsl:template match="/">
        <div>
        <xsl:apply-templates select="//mypear/id"/>
        </div>
    </xsl:template>
    <xsl:template match="mypear/id">
        <xsl:variable name="id" select="text()"/>
        <input type="checkbox" id="{text()}" value="{text()}">
            <xsl:if test="//node()[name() = $type]/check/id[text() = $id]">
                <xsl:attribute name="checked">checked</xsl:attribute>
            </xsl:if>
        </input>
    </xsl:template>
</xsl:stylesheet>

если я правильно понял то вот этот шаблон сделает примерно то что вам нужно...

Sander83 13-06-2007 15:40 598841

Делаю фалик с шаблоном xsl и к нему xml файл. Открываю xml в брузере. Нормально форматируеться по шаблону.
Беру делаю html или xhtml файл и xsl шаблон к нему. Открываю html в браузере. Преобразование не применяеться.
Можно ли выполнить преобразование над html не на сервере, и не используя JavaScript, аналогичным образом, как в первом случае, с xml?

Vlad Drakula 13-06-2007 15:49 598846

Sander83
1) html не есть валидный XML
2) так сделать можно, но я не вижу в этом смысла, зачем???


Sander83 13-06-2007 16:48 598875

1)я пробЫвал сделать это на xhtml, а это валидный xml.
2)хочу что бы на сайте лежал xml и файл трансформации, xml легко модифицировать. Не хочеться использовать серверную обработку.
И не хочеться на клиенте пользоваться mshtml или XSLTrasnform библиотеками, так как их загрузка может быть запрещена на клиенте.

Как всеьтаки это можно сделать?

Vlad Drakula 14-06-2007 12:58 599216

Sander83
Цитата:

2)хочу что бы на сайте лежал xml и файл трансформации, xml легко модифицировать. Не хочеться использовать серверную обработку.
И не хочеться на клиенте пользоваться mshtml или XSLTrasnform библиотеками, так как их загрузка может быть запрещена на клиенте.
так почему вам не держать XML, а не XHTML ?

cobaa 14-06-2007 16:57 599290

Может подскажете мне как можно вывести для печати на стикере через xsl
вывожу в html.
Там нужна таблица 8 строк на 3 столбца
если пишу
PHP код:

<xsl:for-each select="report/rec"
<
xsl:if test="(position()-1) mod 3=0"><tr></xsl:if>
<
td><xsl:value-of select="fio"/><br /><xsl:value-of select="adres"/><br /><br /><xsl:value-of select="account"/></td>
<
xsl:if test="position() mod 3=0"></tr></xsl:if>
<
xsl:if test="position() mod 24=0"><class="new_page"></p></table><table border="1"></xsl:if> 

То ругается что внутри <xsl:if> не может быть неоткрытых или незакрытых тегов

vadimiron 14-06-2007 18:00 599316

Одно решение, которое я исользовал для похожей задачи
PHP код:

<xsl:if test="(position() mod $objectsProRow)= 0">

            <
xsl:text disable-output-escaping="yes">&lt;/tr&gt;</xsl:text>
            <
xsl:text disable-output-escaping="yes">&lt;tr&gt;</xsl:text>
          </
xsl:if> 

то есть вместо < использовать
PHP код:

&lt

и тд

cobaa 14-06-2007 19:19 599351

Спасибо большое - помогло, а то до этого 2 дня ушли насмарку!!!
И в догонку вопрос - можно ли как-то получить html-код готовой страницы, чтобы проверить ее на валидейт, найти ошибки в форматировании и т.п.

Vlad Drakula 15-06-2007 13:15 599632

vadimiron
в XSL 2.0 не заработает

cobaa
Цитата:

можно ли как-то получить html-код готовой страницы, чтобы проверить ее на валидейт, найти ошибки в форматировании и т.п.
1) открываем XmlSpy
2) открываем XML файл
3) открываем XSL файл
4) нашимаем F10
5) создается новый файл с результатом трансформации
6) сохраняем как нужно

FADE 04-07-2007 17:27 608111

народ, как будет выглядеть шаблон для помечания нескольких чекбоксов из определенного количества?

есть список всех чекбоксов:

<city>
<item>1</item>
</city>
<city>
<item>2</item>
</city>
<city>
<item>3</item>
</city>
<city>
<item>4</item>
</city>

и там же список тех кто выбран, для каждего юзера:

<user>
<check>
<item>1</item>
</check>
<check>
<item>3</item>
</check>
</user>

<user>
<check>
<item>2</item>
</check>
<check>
<item>4</item>
</check>
</user>

<user>
<check>
<item>3</item>
</check>
</user>

список всех чекбоксов выводится на одной странице для каждого юзера, где для каждого выбраны соответствующие юзеру, как??

FADE 04-07-2007 17:38 608118

я сделал шаблон user в котором находится for-each //city проблема в том что изза обращении к элементу city и написании двух слешов указатель уходит из самого шаблона user :( как его сравнивать с check/item ума не приложу..

Coutty 13-04-2008 20:33 780776

Цитата:

Цитата Vlad Drakula
в XSL 2.0 не заработает »

Вот, у меня та же проблема. Если сделать как говорит vadimiron, то выводит просто тэги в виде текста.
Если написать так:
Код:

<xsl:for-each select="object">
<xsl:if test="(position() mod 2)=1">
<tr />
</xsl:if>
<td>разные там преобразования и прочее</td>
</xsl:for-each>

(в конце цикла </tr> не добавляю), то выводится таблица как надо - в два столбца, но ведь это неправильно!
Текст-то получается такой:
HTML код:

<tr />
<td>текст1</td>
<td>текст2</td>
<tr />
<td>текст3</td>
<td>текст4</td>
...

Или смириться с тем, что работает? :)

Преобразование на стороне клиента, т.ч. я не уверен, что выводится именно такой html.


Время: 19:29.

Время: 19:29.
© OSzone.net 2001-