Entfernen Sie die letzten Zeichen, die in einem XSLT-string
In mein CMS ist es möglich, einen neuen Beitrag erstellen, und wählen Sie ein Bild gezeigt werden, auf das Artikel. Wenn ein Bild gewählt wird, wird eine Miniaturansicht des Bildes wird automatisch mit angelegt werden.
Wenn das hochgeladene Bild heißt image.jpg, dann das entsprechende Vorschaubild wird automatisch benannt werden image_thumbnail.jpg.
Ich würde jetzt gerne mit dem thumbnail-Bild, überall auf der website, wo der Artikel ist erwähnt, außer im Artikel selbst (wo das original große Bild angezeigt werden soll).
Aber wie kann ich das tun?
Ich kann mir vorstellen, wenn ich könnte Holen Sie sich den ursprünglichen Namen des Bildes, und dann teilen Sie es sich vor dem suffix (.jpg
, .png
, .jpeg
etc.) und fest _thumbnail
nach dem Namen, dann wäre das ausreichend.
In anderen Worten, ich will den kompletten Dateinamen, und schneiden Sie es in zwei Teile, so dass ich legen Sie die Zeichenfolge _thumbnail
zwischen den beiden teilen.
Vielleicht funktionieren würde, aber was ist, wenn ein Bild aufgerufen image.2horses.jpg (eine Datei mit mehr als einem Punkt im Dateinamen) hochgeladen wird? Eine naive Schnitt vor dem '.' wouldn ' T Arbeit hier.
Gibt es eine Möglichkeit dies zu umgehen? Vielleicht, indem die mit dem Namen bis vor die letzten 4 (.jpg
, .png
) oder 5 (.jpeg
) Zeichen?
InformationsquelleAutor Kim Andersen | 2009-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Angesichts der Namen des Bildes in $filename,
Wenn man davon ausgehen kann, dass alle Bilder am Ende in ".jpg" und nicht haben ".jpg" an anderer Stelle in den Dateinamen, dann sollte dies funktionieren:
Wenn Sie nicht wissen, die Bild geben (wie die, die Sie behandeln möchten, gif und png), oder wenn Sie denken, dass die Verlängerung kann mehrfach vorkommen in den Dateinamen ("image.jpg.jpg"), dann möchten Sie eine Vorlage, um Ihnen zu helfen:
Sorry, -1 von mir, Annahmen wie diese führen zu fehlerhaftem code. Ich arbeite mit tools, die eine Menge von Umwandlungen und Sie fügen Sie einfach die neue Erweiterung zur Ende, so konnte ich Sie einfach etwas erleben genannt image.jpg.tif.jpg
InformationsquelleAutor Chris Nielsen
Aus der Spitze von meinem Kopf:
Genannt:
Ergibt:
+1, ich mag Ihre verallgemeinerte Lösung besser als meins jedenfalls.
InformationsquelleAutor Tomalak
Einer Allgemeinen Lösung, die nur standard-XSLT ist etwas hart, da müssen Sie suchen Sie die Zeichenfolge aus dem Ende. Sie können teilen Sie Ihre Dateinamen aufzuhalten der Benutzung zwei Funktionen substring-before-last und substring-after-last. Leider, diese Funktionen sind nicht Bestandteil von XSLT. Können Sie Google und suchen Implementierungen. Vorausgesetzt, Sie haben diese beiden Funktionen implementiert als XSLT-Vorlagen können Sie dann verwenden Sie die folgende Vorlage zum generieren von thumbnail-Namen:
Können Sie die Vorlage verwenden, wie dies (vorausgesetzt, die variable $Datei-name enthält den Namen des Bildes):
InformationsquelleAutor Martin Liversage
Haben Sie einen Blick auf die XPath-Funktionen übersicht bei W3Schools, insbesondere die
substring-before
Methode.Kann man den letzten Punkt im string durch Rekursion oder eine Schleife. Siehe biglist.com/lists/xsl-list/archives/200102/msg00838.html
InformationsquelleAutor Rahul
Ich glaube XPath-Funktionen Betriebssystem auf string die Ihnen helfen könnten. Ich würde versuchen, mit einigen einfachen
replace
odertranslate
.InformationsquelleAutor Grzegorz Oledzki
XSLT-2-Lösung mit regexp:
Ursprüngliche Antwort (auch XSLT-2):
Dies entfernt alle nach dem letzten separator (einschließlich separator). Also unterhalb der $separatorRegexp sein könnte',\.jpg' oder einfach nur '\.' und $separator '.jpg' oder '.' im anderen Fall.
Schließlich das '_thumbnail.jpg' können angehängt werden, mit concat.
image.2horses.jpg
(aus der Frage) bekomme ichimage.2horses
. (Wahrscheinlich, weil es ist nur ein Element in der Sequenz, so gibt es nichts zu string-join.) Eine unterschiedliche XPath-2.0-Ansatz wärereplace($filename,$separatorRegexp,concat($separator,'$1'))
wo $separatorRegexp =(\.[^\.]*)$
und $separator =_thumbnail
. Dies würde Ihnenimage.2horses_thumbnail.jpg
als Ausgang.Hier ist das ersetzen ohne die Variablen:
replace($filename, '(\.[^\.]*)$', concat('_thumbnail', '$1'))
Daniel Haley: das ist, was ich beabsichtigte. Anfügen der _thumbnail.jpg ist schon trivial. Und als meine Lösung besteht aus einer regexp sowieso, so dass Ihr offenbar besser.
InformationsquelleAutor David L.