Wie kann ich die Streifen Akzente von Zeichen, die in XSL?
Ich weiter suchen, aber nicht finden können, ein XSL-Funktion entspricht das "normalize-space" Zeichen. Das heißt, meine Inhalte akzentuiert UNICODE-Zeichen, die ist toll, aber von diesem Inhalt, ich bin erstellen mit dem Namen, wo ich nicht wollen, dass diese Akzente.
So, ist es etwas, das ich im Blick, oder nicht richtig googeln, leicht zu verarbeiten-Zeichen?
In den XML-Daten:
<filename>gri_gonéwiththèw00mitc</filename>
Im XSLT-stylesheet:
<xsl:variable name="file">
<xsl:value-of select="filename"/>
</xsl:variable>
<xsl:value-of select="$file"/>
Ergebnisse in "gri_gonéwiththèw00mitc"
wo
<xsl:value-of select='replace( normalize-unicode( "$file", "NFKD" ), "[^\\p{ASCII}]", "" )'/>
Ergebnisse in nichts nach.
Was ich bin mit dem Ziel für ist gri_gonewiththew00mitc
(keine Umlaute)
Bin ich mit der syntax falsch?
- Entfernen von Akzenten funktioniert nur für eine kleine Teilmenge von Unicode-Zeichen. Soweit ich weiß, gibt es keine standard-Weg, der latinisierten Transkription von Zeichen. (Das heißt, es ist eine andere-eine für jede Sprache.)
- Überprüfen Sie meine Antwort für die korrekte RegExp syntax.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In XSLT/XPath 1.0-wenn Sie möchten, ersetzen die Sonderzeichen durch die unbetont Gegenstück, Sie könnte verwenden
translate()
Funktion.Aber, geht davon aus, dass Ihr "Akzent UNICODE-Zeichen" nicht komponiert unicode-Zeichen. Wenn das der Fall wäre, müssten Sie mithilfe von XPath 2.0
normalize-unicode()
Funktion.Und, wenn das wirkliche Ziel ist es, eine gültige URI, sollten Sie
encode-for-uri()
Update: Beispiele
Ergebnis:
gri_gonewiththew00mitc
Ergebnis:
gri_gon%C3%A9withth%C3%A8w00mitc
Richtige Ausdruck liefern schlagen von @biziclop:
Ergebnis:
gri_gonewiththew00mitc
Hinweis: In XPath 2.0, die richtige Charakter-Klasse negation ist mit einem Kapital
\P
.translate()
davon ausgegangen, dass Sie eine Liste mit allen Zeichen, die Sie ersetzen möchten. Meine Vermutung ist, dass die OP will, dies zu vermeiden. Obwohl ich nicht denke, es ist möglich, im Allgemeinen.encode-for-uri()
Funktion.So, im Gegensatz zu meinem Kommentar, Sie könnten versuchen, diese:
Obwohl gewarnt werden, dass alle Zeichen, die nicht zerlegt werden und sind nicht Standard-ASCII (Norwegisch
ø
oder IsländischÞ
zum Beispiel) vollständig gelöscht werden aus der Zeichenfolge, aber das ist wohl okay mit Ihren Anforderungen.Die bisher vorgeschlagenen Wege enthalten unknownthe Charakter-Klasse namens 'ASCII'. In meiner Erfahrung, XPath 2.0 erkennt der Klasse 'BasicLatin', die dazu dienen sollten den gleichen Zweck wie die 'ASCII'.