Frage
Ich muss in der Lage sein zu finden, das Letzte vorkommen eines Zeichen in einem element.
Zum Beispiel:
<mediaurl>http://www.blah.com/path/to/file/media.jpg</mediaurl>
Wenn ich versuche, ihn zu suchen, durch die Verwendung substring-before(mediaurl, '.')
und substring-after(mediaurl, '.')
dann wird es natürlich entsprechend auf den ersten Punkt.
Wie kann ich die Datei-Endung?Im wesentlichen, die ich brauche, um den Dateinamen und die Erweiterung von einem Pfad wie diesem, aber ich bin ziemlich ratlos, wie Sie mithilfe von XSLT.
Lösung
Die folgenden ist ein Beispiel für eine Vorlage erzeugen würde, die erforderliche Leistung in XSLT 1.0:
<xsl:template name="getExtension">
<xsl:param name="filename"/>
<xsl:choose>
<xsl:when test="contains($filename, '.')">
<xsl:call-template name="getExtension">
<xsl:with-param name="filename" select="substring-after($filename, '.')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$filename"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="getExtension">
<xsl:with-param name="filename" select="'http://www.blah.com/path/to/file/media.jpg'"/>
</xsl:call-template>
</xsl:template>
Andere Tipps
Wenn Sie XSLT 2.0-es ist ganz einfach:
<xsl:variable name="extension" select="tokenize($filename, '\.')[last()]"/>
Wenn Sie nicht, es ist ein bisschen schwieriger.Es gibt ein gutes Beispiel aus der O ' Reilly XSLT Cookbook.Suche nach "Tokenisierung eine Zeichenfolge."
Ich glaube, es gibt auch eine EXSLT-Funktion, wenn Sie haben, zur Verfügung.
Wie über die tokenisierung mit "/" und nehmen Sie das Letzte element aus dem array ?
Example: tokenize("XPath is fun", "\s+")
Result: ("XPath", "is", "fun")
War ein XSLT-fiddler irgendwann wieder...verloren jetzt.Aber HTH
Für Referenz, dieses problem ist in der Regel genannt "substring-after-last" in XSLT.