о user-defined функциях в xsl [письмо moko]
Александр Петросян (PAF) 22.01.2003 10:08
/ 22.01.2003 10:09
From: "Konstantin Morshnev" <moko@design.ru>
Sent: Thursday, October 10, 2002 6:27 PM
Subject: о user-defined функциях в xsl
Добрый день!
Как известно, синтаскис XSL в некоторых случаях не очень удобен. В частности, конструкция аналогичная if / then / else выглядит многоэтажным монстром.
В версии XML процессора, который используется в парсере поддерживается одно из популярных расширений XSL - возможность задания пользовательских функций.
Выглядит это довольно прозрачно:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:func="http://exslt.org/functions"
xmlns:if="http://www.atrlebedev.ru/xsl/if"
extension-element-prefixes="func if"
version="1.0"
>
<func:function name="if:def" >
<xsl:param name="condition" />
<xsl:param name="if-true" />
<xsl:param name="if-false" default="" />
<xsl:choose>
<xsl:when test="$condition">
<func:result select="$if-true" />
</xsl:when>
<xsl:otherwise>
<func:result select="$if-false" />
</xsl:otherwise>
</xsl:choose>
</func:function>
<xsl:template match="*" >
<xsl:value-of select="if:def(name(.) = 'body','found','not found')" />
</xsl:template>
Ну и в использовании, как видно, довольно просто...
На сайте
http://www.exslt.org/ помимо описания расширений, которые должны поддерживаться на уровне процессора, есть еще библиотека функций, написанных как на XSLT, так и и на EXSLT, и на msxml. Например функции для работы со строками:
http://www.exslt.org/str/index.htmlПонятно, что в результате можно потерять одно из преимуществ XSL -
переносимость, но с другой стороны поддержка user-defined функций есть почти везде (хотя не везде эти функции пишутся на XSL). Поэтому правильнее составитьнекоторый набор расширенных функций, и пользоваться только ими.
WBR, MoKo