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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top