Я бы хотел, чтобы мой сгенерированный выходной файл содержал пути к файлам, которые указывают на путь относительно таблицы стилей. Расположение таблицы стилей может измениться, и я не хочу использовать параметр для таблицы стилей. Мое решение для этого состоит в том, чтобы получить полный URI таблицы стилей:
<xsl:variable name="stylesheetURI" select="document-uri(document(''))" />
Теперь мне нужно только отрезать имя файла от $stylesheetURI
. Это вдохновило меня на написание XSLT 2.0 клонов функций PHP basename и dirname :
<xsl:function name="de:basename">
<xsl:param name="file"></xsl:param>
<xsl:sequence select="tokenize($file, '/')[last()]" />
</xsl:function>
<xsl:function name="de:dirname">
<xsl:param name="file"></xsl:param>
<xsl:sequence
select="string-join(tokenize($file, '/')[position() != last()], '/')" />
</xsl:function>
Теперь я могу сделать что-то подобное в моем шаблоне:
<img src="{concat(de:dirname($stylesheetURI),'/img/myimage,png')}" />
Мой вопрос: есть ли лучшие / более быстрые способы сделать это с помощью родного XSLT 2.0?