So ersetzen Sie alle Sonder Zeichen in einer Zeichenfolge mit Leerzeichen?
Ich bin mit XSLT 1.0.
Angenommen ich habe eine Zeichenfolge, die ähnlich wie "apple-mango%auch|es"
Ich versuche, ersetzen Sie alle nicht-alphanumerischen Zeichen mit Leerzeichen.
Ich habe versucht,
<xsl:value-of select="translate(., translate(., '0123456789abcdefghijklmnopqrstuvwxysABCDEFGHIJKLMNOPQRSTUVWXYZ', ''), ' ')"/>
aber es hat nicht funktioniert.
Das Problem ist mit der äußeren übersetzen.
So wie ich das verstehe, in einem translate()
die Länge der Dritten Zeichenfolge sollte derselbe sein wie der zweite string oder sonst die fehlenden Zeichen werden getroffen werden, um durch einen leeren string ersetzt (''
).
Das innere zu übersetzen, funktioniert einwandfrei, da ich möchte, entfernen Sie alle Zeichen mit einem leeren string sowieso.
Aber die äußeren übersetzen ersetzt nur das erste Zeichen des zweiten argument-string mit einem Leerzeichen und ersetzt den rest mit einem leeren string.
Da meine Liste von nicht-alphanumerischen Zeichen im zweiten argument des äußeren übersetzen ist dynamisch, ich kann nicht pre-code, das Dritte argument.
ex:
Meine innere übersetzen zurück -%|
. Ist das so richtig.
Nun auf mein äußeres zu übersetzen, ist translate(., '-%|', ' ')
.
Gibt apple mangoalsothere
.
Wie kann es geschehen kurzen schreiben etwas wie dieses:
translate(., '`~!@#$%^&*()-_=+[]{}\|;:'",<.>/?', ' ')
- Können Sie erklären, was falsch ist mit dem ersten Ausdruck, so dass in der Tat ersetzen Sie alle nicht-Zeichen alphameric mit einem Leerzeichen. Sie wirklich brauchen, um spezifisch über, was Sie tun müssen, da gibt es nicht wirklich eine definition von "Sonderzeichen". Entweder müssen Sie definieren, genau die Zeichen, die Sie behalten möchten, oder Sie definieren genau das, was Zeichen, das Sie entfernen möchten. Danke!!!
- Die Doppel-übersetzen trick verwendet in Ihrem Versuch, genau diese Aufgabe zu bewältigen: die innere übersetzen erzeugt eine Liste aller Zeichen in der Eingabe nach dem entfernen ascii-alphanumerische Zeichen, und die äußeren übersetzen ersetzt alle Zeichen in dieser Liste durch Leerzeichen.
- Durch Sonderzeichen meinte ich nicht-alphanumerische Zeichen. Finden Sie die aktualisierte Frage
- Finden Sie die aktualisierte Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Weg, dies zu tun wäre eine rekursive Vorlage zu erstellen, die eine Zeichenfolge von nichts, sondern Räume für eine gegebene Länge
Dann erzeugen Sie in einem string die Anzahl der Leerzeichen gleich der Länge der Zeichenfolge, mit der Sie arbeiten.
Anschließend können Sie diese
spaces
variable in Ihre zu übersetzen. Zum Beispiel, versuchen Sie, diese XSLT -Nun, wenn Sie hatte mehrere Zeichenfolgen, die Sie ersetzen wollte, in Ihre XML -, Sie könnten etwas verbessern, Dinge, die durch eine Globale variable für
spaces
wurde gleich der Länge des längsten Strings. Dies würde Ihnen mehr Räume als Sie benötigt, aber, dass wäre kein problem.Versuchen, diese XSLT zu
Angewandt auf das XML -
Folgende Ausgabe
str:padding()
Funktion zum generieren der erforderlichen string aus Leerzeichen.z
- nicht ein anderers
.Andere Weise, die Sie Aussehen könnte auf diese ist das Ergebnis der "inneren übersetzen" - ich.e die Zeichenfolge, die alle unerwünschten Zeichen, die als parameter in eine benannte rekursive template ersetzen würde Ihnen ein-by-one, die durch ein Leerzeichen:
XML
XSLT 1.0
Ergebnis