在XSL / XSLT

时间:2016-08-27 17:09:15

标签: regex xslt match

这让我非常疯狂......我不是一个正则表达式的人... sooo

我在线尝试了几个正则表达式示例,但没有!正在......

我想要匹配的内容:

/path1/path2/filename.zip$parameter1=aaaaa

我想得到的是:

path1

path2

和文件名(没有查询参数/ s或前导斜杠...)所以只是filename.zip

是的,我被XSLT 1.0困住了......

1 个答案:

答案 0 :(得分:0)

以此为出发点:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:param name="query">/path1/path2/filename.zip$parameter1=aaaaa</xsl:param>

<xsl:template match="/">
    <xsl:call-template name="tokenize">
        <xsl:with-param name="text" select="substring-before($query, '$')"/>
    </xsl:call-template>
</xsl:template>

<xsl:template name="tokenize">
    <xsl:param name="text"/>
    <xsl:param name="delimiter" select="'/'"/>
        <xsl:variable name="token" select="substring-before(concat($text, $delimiter), $delimiter)" />
        <xsl:if test="$token">
                <xsl:value-of select="$token"/>
                <xsl:text disable-output-escaping="yes">&#10;</xsl:text>
        </xsl:if>
        <xsl:if test="contains($text, $delimiter)">
            <!-- recursive call -->
            <xsl:call-template name="tokenize">
                <xsl:with-param name="text" select="substring-after($text, $delimiter)"/>
            </xsl:call-template>
        </xsl:if>
</xsl:template>

</xsl:stylesheet>

应用于任何XML输入,结果将是:

path1
path2
filename.zip