Можно ли применить шаблон к параметру xsl перед применением шаблонов к xml

У меня есть параметр xsl, который представляет собой строку. Я хочу проанализировать эту строку, разделить ее и для каждого значения подстроки я хочу применить шаблон в xsl.

Это возможно? Если да, то не могли бы вы посоветовать оптимистичное решение?

Спасибо


person Raju    schedule 20.07.2010    source источник


Ответы (2)


Изменить: неправильно понял вопрос, извините.

Ответ: да.

Вход:

<secuence>Item1 Item2 Item3</secuence>

Таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="secuence/text()" name="secuence">
        <xsl:param name="string" select="."/>
        <xsl:param name="separator" select="' '"/>
        <xsl:if test="$string != ''">
            <xsl:choose>
                <xsl:when test="contains($string,$separator)">
                    <xsl:call-template name="secuence">
                        <xsl:with-param name="string" select="substring-before($string,$separator)"/>
                        <xsl:with-param name="separator" select="$separator"/>
                    </xsl:call-template>
                    <xsl:call-template name="secuence">
                        <xsl:with-param name="string" select="substring-after($string,$separator)"/>
                        <xsl:with-param name="separator" select="$separator"/>
                    </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                    <!-- Your desired template -->
                    <Item>
                        <xsl:value-of select="$string"/>
                    </Item>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Результат:

<secuence>
    <Item>Item1</Item>
    <Item>Item2</Item>
    <Item>Item3</Item>
</secuence>
person Community    schedule 20.07.2010
comment
Привет, спасибо за быстрый ответ. У вас есть вопрос, параметр xsl будет безопасным? Я не уверен, как вы смогли сгенерировать результат. Я как бы новичок в XSLT, не могли бы вы посоветовать также, как отлаживать? Ценю вашу помощь. Спасибо Раджу - person Raju; 20.07.2010
comment
@Raju: отредактируйте ответ с неправильной разметкой для примера ввода. Параметры: $string и $separator. В XSLT вы можете определить значения по умолчанию для параметров (в данном случае строковое значение контекстного узла и пробел). Кроме того, вы спрашиваете Карнотавра: можно ли сначала применить шаблон XSL к переменной, а затем к xml, который необходимо преобразовать? В XLST 1.0 можно применять шаблоны (как и в случае с xsl:apply-templates) к любому выражению, оценивающему набор узлов, даже к переменной. В XSLT 2.0 вы также можете выполнять итерацию по безопасности (это новый тип данных в XPath 2.0). - person ; 20.07.2010

Не уверен, что вы имеете в виду, но копирование этого шаблона может помочь: XSLT - лучший способ разбить и отобразить текст, разделенный запятыми, как HTML

person CarneyCode    schedule 20.07.2010
comment
Можно ли сначала применить шаблон XSL к переменной, а затем к xml, который необходимо преобразовать? - person Raju; 20.07.2010