131 Stimmen

Wie kann ich eine Zeichenkette mit XSLT in Groß- oder Kleinbuchstaben umwandeln?

Wie wird die Groß-/Kleinschreibung in XSL umgewandelt?

<xsl:variable name="upper">UPPER CASE</xsl:variable>
<xsl:variable name="lower" select="???"/>

214voto

Jon W Punkte 14908

In XSLT 1.0 ist die upper-case() y lower-case() Funktionen sind nicht verfügbar. Wenn Sie ein 1.0-Stylesheet verwenden, ist die übliche Methode der Groß- und Kleinschreibung translate() :

<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

<xsl:template match="/">
  <xsl:value-of select="translate(doc, $lowercase, $uppercase)" />
</xsl:template>

5 Stimmen

Gibt es eine Unicode-Version? Diese Lösung wird mit komischen Zeichen nicht funktionieren...

1 Stimmen

Für XSLT 1.0 müssten Sie mehr zu den smallcase/uppercase-Variablen hinzufügen oder eine Erweiterungsfunktion verwenden.

1 Stimmen

Wenn Sie sich entschieden haben, die Erweiterungsfunktion nicht zu verwenden, können Sie vielleicht eine vollständige Liste mit Hilfe der Unicode Character Database erstellen: unicode.org/Public/UNIDATA/UCD.html

49voto

Anton Gogolev Punkte 109749

XSLT 2.0 hat upper-case() y lower-case() Funktionen. Im Falle von XSLT 1.0 können Sie translate() :

<xsl:value-of select="translate("xslt", "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")" />

10voto

Vladislav Punkte 1430

Die .NET XSLT-Implementierung erlaubt es, benutzerdefinierte verwaltete Funktionen in das Stylesheet zu schreiben. Für Kleinbuchstaben() kann das sein:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:utils="urn:myExtension" exclude-result-prefixes="msxsl">

  <xsl:output method="xml" indent="yes"/>

  <msxsl:script implements-prefix="utils" language="C#">
    <![CDATA[
      public string ToLower(string stringValue)
      {
        string result = String.Empty;

        if(!String.IsNullOrEmpty(stringValue))
        {
          result = stringValue.ToLower(); 
        }

        return result;
      }
    ]]>
  </msxsl:script>

  <!-- using of our custom function -->
  <lowercaseValue>
    <xsl:value-of select="utils:ToLower($myParam)"/>
  </lowercaseValue>

Gehen Sie davon aus, dass das langsam, aber noch akzeptabel sein kann.

Vergessen Sie nicht, die Unterstützung für eingebettete Skripte für Transform zu aktivieren:

// Create the XsltSettings object with script enabled.
XsltSettings xsltSettings = new XsltSettings(false, true);

XslCompiledTransform xslt = new XslCompiledTransform();

// Load stylesheet
xslt.Load(xsltPath, xsltSettings, new XmlUrlResolver());

4 Stimmen

Diese Lösung funktioniert mit allen Zeichen, auch mit seltsamen Unicode-Zeichen. Das hat bei mir gut funktioniert, aber ich habe den Methodenkörper vereinfacht auf return (stringValue ?? string.Empty).ToLower(); . Danke @Vladislav, ich wusste gar nicht, dass man so etwas kann!

2voto

Natalie Pan Punkte 71
<xsl:variable name="upper">UPPER CASE</xsl:variable>
<xsl:variable name="lower" select="translate($upper,'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/>
<xsl:value-of select ="$lower"/>

//displays UPPER CASE as upper case

1voto

Eric Petroelje Punkte 58501

Großbuchstaben(Zeichenfolge) und Kleinbuchstaben(Zeichenfolge)

15 Stimmen

Diese sind nur in XPath 2.0 enthalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X