Главная » XSLT » Нахождение позиции начала подстроки

0

Задача

Требуется найти индекс позиции, с которой начинается подстрока, а не текст до или после этой подстроки.

Решение XSLT 1.0

<xsl:template name="str:index-of"> <xsl:param name="input"/> <xsl:param name="substr"/> <xsl:choose>

<xsl:when test="contains($input, $substr)"> <xsl:value-of select="string-length(substring-

before($input, $substr))+1"/> </xsl:when>

<xsl:otherwise>0</xsl:otherwise> </xsl:choose> </xsl:template>

XSLT 2.0

<xsl:function name="ckbk:string-index-of"> <xsl:param name="input"/> <xsl:param name="substr"/>

<xsl:sequence select="if (contains($input, $substr))

then string-length(substring-before($input, $substr))+1 else 0"/>

</xsl:function>

Обсуждение

Позиция начала подстроки – это длина предшествующей ей строки плюс 1. Если вы точно знаете, что исходная строка содержит данную подстроку, то можете просто вычислить выражение string-length(substring-before($input, $substr))+1. Но в общем случае нужно обрабатывать также случай, когда под­строка не входит в строку. Мы в этой ситуации возвращаем 0, но можно выбрать и какой-нибудь другой индикатор, например, -1 или NaN.

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

  • Комментарии