Могу ли я связать xslt с другим xslt?

в основном я хочу, чтобы один xslt стал моим "базовым" xslt и хотел связать это с дочерними файлами xslt.

это возможно?

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

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

Я знаю, что мы можем форматировать на основе типа клиента, но это сделает xslt загроможденный. В идеале, как и код, связанный с клиентом для каждого клиента.

разве это не способ сделать xslt? Я новичок в xslt!

5 ответов


<xsl:import href="library/utility-include.xsl" />

путь href относительно текущего файла xsl. <xsl:import/> документация.

помните, что вы должны написать свои строки импорта как первый дочерний элемент <xsl:stylesheet> или <xsl:transform>. Они не могут отображаться в ваших файлах.


как указано во всех других ответах, есть две инструкции XSLT:

<xsl:import>

и

<xsl:include>

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

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

например, посмотрите на библиотека FXSL для функционального программирования в XSLT.


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


Да, вы можете - вы можете include и import другие XSLT-файлы.

это хорошее место, чтобы начать обучение о import это то, что вы ищете конкретно. include отличается, но стоит знать об.


Да, вы можете использовать тег, чтобы вытащить другой XSLT:

<xsl:include href="OtherTemplate.xslt" />

есть несколько gotchas! Так что будьте осторожны!

"Родительский" XSLT будет кэшировать включенный XSLT. Поэтому, если вы внесете изменения в вложенный / включенный XSLT-он не будет отображаться сразу в Родительском преобразовании XSLT. Я "думаю", что это может быть связано с использованием XslCompiledTransform - но не на 100%. В любом случае, если вы измените Родительский XSLT, он обновит кэш. (Это было очень раздражающий вопрос по некоторым проектам)

во-вторых, вы, вероятно, столкнетесь с проблемами с параметром $currentPage. Он может быть объявлен только один раз во всей таблице стилей XSLT - это включает в себя любые "включает"!!! Так что просто будьте осторожны, где вы ссылаетесь на элемент! ссылка от здесь