Динамически обрабатывайте файлы .inc с помощью XSL

#xml #xslt

Вопрос:

У меня есть следующий XML-документ, который я хочу включить в состав всех файлов на веб-сайте:

XML-документ заголовка (выходные данные указаны ниже как заголовок.aspx):

 <header>
<div class="welcome">Hello there!</div>
</header>
 

Это часть глобального XSL-файла, выполняемого на всех страницах, которая вызывает вышеуказанное:

Глобальный файл XSL

 <xsl:template name="my-header">
<xsl:call-template name="my-output">
<xsl:with-param name="path">/inc/header.aspx</xsl:with-param>
</xsl:call-template>
</xsl:template>
 

Что я хотел бы сделать, так это иметь возможность настраивать вывод файла header.aspx в зависимости от того, где он выводится. Например, если он выводится на файл, указанный в каталоге /test1, он может выводиться как:

 <header>
<div class="welcome">Thank you for subscribing!</div>
</header>
 

Но в файле в каталоге /test2 это может быть:

 <h2 class="welcome">Sad to see you go!</div>
 

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

Есть ли у меня какие-либо варианты для этого? Я понимаю, что мог бы создать отдельные заголовки и вызывать их на основе операторов xsl:choose, но я бы предпочел иметь один файл включения, так как большая часть содержимого останется неизменной на всех страницах.

Ответ №1:

Вы можете указать URI файла заголовка в качестве параметра преобразования и загрузить файл, используя document() функцию с этим URI в качестве аргумента.

Глобальный параметр таблицы стилей объявляется с использованием xsl:param элемента верхнего уровня (верхний уровень означает, что он является дочерним элементом xsl:stylesheet ), и способ ввода значения зависит от API процессора, который вы используете для выполнения таблицы стилей.