Выбор последнего слова из строки в xslt - PullRequest
9 голосов
/ 15 ноября 2011

Я просто хочу взять последний элемент из строки, которая выглядит как "aaa-bbb-ccc-ddd" в xslt.

Выход должен быть "ddd" независимо от '-'s.

1 Ответ

13 голосов
/ 15 ноября 2011

XSLT / Xpath 2.0 - использование функции tokenize () для разделения строки на «-», а затем использование фильтра предикатов для выбора последнего элемента в последовательности:

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:value-of select="tokenize('aaa-bbb-ccc-ddd','-')[last()]"/>
    </xsl:template>
</xsl:stylesheet>

XSLT / XPath 1.0 - используя рекурсивный шаблон для поиска последнего вхождения "-" и выбора подстроки, следующей за ней:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:call-template name="substring-after-last">
            <xsl:with-param name="input" select="'aaa-bbb-ccc-ddd'" />
            <xsl:with-param name="marker" select="'-'" />
        </xsl:call-template>
    </xsl:template>

    <xsl:template name="substring-after-last">
        <xsl:param name="input" />
        <xsl:param name="marker" />
        <xsl:choose>
            <xsl:when test="contains($input,$marker)">
                <xsl:call-template name="substring-after-last">
                    <xsl:with-param name="input"
          select="substring-after($input,$marker)" />
                    <xsl:with-param name="marker" select="$marker" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$input" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...