string xpath xslt case-conversion

string - ¿Cómo puedo convertir una cadena en mayúscula o minúscula con XSLT?



xpath case-conversion (6)

¿Cómo se hace la conversión de casos en XSL?

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


En XSLT 1.0 las funciones upper-case() y lower-case() no están disponibles. Si está utilizando una hoja de estilo 1.0, el método común de conversión de casos es 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>


La implementación .NET XSLT permite escribir funciones administradas personalizadas en la hoja de estilos. Para minúsculas () puede ser:

<?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>

Supongamos que puede ser lento pero aceptable.

No se olvide de habilitar el soporte de scripts incrustados para la transformación:

// 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());


Para la codificación de caracteres ANSI:

translate(//variable, ''ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸŽŠŒ'', ''abcdefghijklmnopqrstuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿžšœ'')


XSLT 2.0 tiene funciones en upper-case() y lower-case() . En el caso de XSLT 1.0, puede usar translate() :

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


mayúscula (cadena) y minúscula (cadena)


<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