Чтобы добавлять сообщения и комментарии, .

@mabu:
mabu

Нашёл на либрусеке книгу Стивена Холзнера «XSLT Библиотека программиста». Ещё не читал. lib.rus.ec

@lurker:
lurker

is a failure wrapped in pain. There’s no job for which XSLT is the right tool — masklinn

@OCTAGRAM:
OCTAGRAM

fdik.org
YSLT — XSLT C style

Ссылка на YBlog2 битая, правильная — auchdieserschwachsinnmussinsinternet.de
А вообще я смотрел на этот проект: beremiz.org

@Tenno-Seremel:
Tenno-Seremel

JavaScript in XSLT-transformed page runs twice bugzilla.mozilla.org
Reported: 2007-05-15
Да ёлки-палки… (~_~)

@ndtimofeev:
ndtimofeev

Есть у меня stylesheet и xml'ина. При помощи xsltproc одно объединяется с другим и всё хорошо. Как бы теперь проделать тоже самое с hxt-xslt?

@Tenno-Seremel:
Tenno-Seremel

Событие DOMContentLoaded до сих пор не происходит в Firefox для получившегося после XSLT документа что ли? Ну что за люди… Сижу втыкаю в код, а оно, оказывается, просто не работает. Ну офигеть теперь.

bugzilla.mozilla.org
Reported: 2006-02-04
ШЁЛ 2013 ГОД…

@RA:
RA

Декомпозиция сущностей привела к тому, что для того чтобы сделать трансформацию xslt-шаблона страницы нужно подгрузить 10-20 внешних xslt, которые подгружаются через xsl:import. Это привело к долгой загрузке шаблона для его трансформации. Конструкция
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
могла занимать 3 секунды.

От декомпозиции отказываться не хотелось. Уж очень мне нравится идея сделать так
<xsl:call-template name="m_users_show_link"/>
а потом всего в одном месте править, чтобы выводить везде на сайте ФИО или И.О.Ф. В общем много плюшек имеем с этого.

В #2393013 была попытка решить вопрос использованием xsltCache. Но он работает странно. У него долго происходит не только первая загрузка, но и 2,3,4, а потом если повезёт то загрузит шаблон быстро. Не понял я отчего он так себя ведёт.

Там же в #2393013 я высказал идею парсить xsl в единый файл со всеми необходимыми шаблонами и уже без импортов. Сначала я решил сделать это регулярками. Идея показала свою жизнеспособность и возможность такого преобразования. Но идея делать это регулярками не очень хороша, по кучи причин, одна из которых в том, что php иногда валился с неопознаной ошибкой.

Сегодня ночью был реализован вариант с разбором xsl через представление его в виде xml-дерева. В итоге получилось объединить (скомпилировать) необходимые xslt-шаблоны в один за разумное время с последующим его сохранением на диск.
Бенчмарки трансформаций
— некомпиленый вариант — 3.3 сек.
— первая компиляция — 1.1 сек.
— использование уже скомпиленого шаблона — 0.08 сек.
— с включённым xsltcache с использованием скомпиленого шаблона — 0.03 сек.

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

А ещё я люблю использовать именованные шаблоны вместо матчей. Т.е. я использую <xsl:template name="m_user"> вместо <xsl:template match="user">. И это дало положительный эффект. После сборки единого xsl-файла, парсер пробегается по нему и ищет, какие именнованые шаблоны вызываются (<xsl:call-template name="..."/>). А затем все неиспользуемые темплейты попросту выбрасываются. Если бы в коде использовались матчи, то невозможно было бы определить вызывется ли этот шаблон или нет, потому что данных ещё нет. Такое выбрасывание ненужных шаблонов уменьшило размер скомпиленого xsl-файла на 30%.

@RA:
RA

Вот уж не ожидал, но xsltCache нехило так ускоряет импорт xsl файлов.
Есть в проекте разухабистый xsl с кучей импортов (подозреваю что импорты — узкое место) и он импортируется на моей тачке безумные 2 секунды.

$xsl = new DomDocument();
$xsl->load($xsl_file_path);
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl); //2!!! секунды

Проблема в том, что результат importStyleSheet невозможно закешировать. После установки xsltCache код стал таким

if (class_exists("xsltcache", false)){
$proc = new xsltCache();
$proc->importStyleSheet($xsl_file_path);
}
else{
$xsl = new DomDocument();
$xsl->load($xsl_file_path);

$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
}

И импорт стал работать 0.0001 секунды.

Проект pecl.php.net
Установка на php5.4 michaelsanford.com
Расширение xslcache.so нужно загружать после xsl.so, иначе PHP может падать (segmentation fault)
И ещё годная заминусованя статья на хабре habrahabr.ru
В сети упоминается что расширение xslcache достаточно стабильно. Некоторые рекомендуют использовать на боевых серверах.

PS На счёт импортов. Может есть смысл парсить xsl, заменять строки импорта на сами импортируемые файлы и сохранять? Тогда у нас получится один большой xsl файл, но уже без всяких зависимостей. Нужно будет как-нибудь потестить.

@Balancer:
Balancer

XSLT — это, походу, такой энтерпрайз brainfuck. Как такой ужас можно было выдумать? o_O

@Vugluskr:
Vugluskr

я люблю технику битовых масок и довольно часто использую в разных местах. Везде было хорошо кроме xslt 1.0, бля. Математик из меня хуевый, потому я долго шел к нужному шаблону :)

<xsl:template name="bitmask">
<xsl:param name="value" />
<xsl:param name="mask" />

<xsl:if test="(($value mod ($mask * 2)) — ($value mod $mask)) = $mask">
<!-- если маска содержится -->
</xsl:if>
</xsl:template>

@HeX:
HeX

хм, посоны, а зачем нужен XSLT? есть же PHP+CSS? или я просто не понимаю СУТИ? разъясните пожалуйста^^

@xeningem:
xeningem

Нужен XSLT редактор, и если можно — ключ для saxon, который делает его вывод читаемым.

@schors:
schors

пролистал книжку Данила Кострова "Применение технологии XSLT при разработке сайтов на UMI.CMS". 2010 год. годная книжка

@venefica:
venefica

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

@venefica:
venefica

не пойму. если пишу с без apply-templates ничего не происходит, если с то содержимое дублируется

@venefica:
venefica

не пойму как убить тег с содержимым. <xsl:template match="sometag"/> убирает только тег, без содержимого. ЧЯДНТ

@Vugluskr:
Vugluskr

Прикольный баг в модуле xslt для нгинкса :) Тег "<br />" разворачивается в "<br></br>", что некоторыми браузерами интерпретируется как двойной брейк. Мелочь, конечно, но как-то в тупик ставит — не ясно, как обойти :)

@Vugluskr:
Vugluskr

Тут совершенно внезапно выяснил, что прекрасный нгинкс умеет прекраснейшим образом обхуячивать xsl для вывода с прокси. Был крайне сильно удивлен, даже я бы сказал — охуел. Это ж можно весь трансформинг с апп-сервера на нгинкс повесить. Пиздец, пол-жизни мимо.

@gAmUssA:
gAmUssA

В iTunesU нашел совершенно чудесные лекции про XML и Java от Стенфордского университета fas.harvard.edu . Хочу, чтобы в нашей стране в ВУЗах такое делали.

@gAmUssA:
gAmUssA

Чего бы такого хорошего почитать про XSLT и XPATH. Курс молодого бойца, желательно применительно к Java.

@eR:
eR

а умеет ли оно сделать несколько файлов на выходе — у меня на фходе формат где может быть много нод — а на выходе- только одна? чтото я торможу

@RA:
RA

xsl. Как в результирующем дереве предку текущего узла добавить атрибут?

Что-то вроде
<xsl:attribute name=""></xsl:attribute>
но только для предка текущего узла.

@xor:
xor

Очень хорошая статья, восхваляющая XSLT. Уже старая, сейчас просто решил сохранить ссылку.
onenaught.com

@eR:
eR

поговорим? ^_^

@khekkly:
khekkly

жуйк, а есть xslt девелоперы?