Как я могу преобразовать строку в верхний или нижний регистр с помощью XSLT?
Как вы делаете преобразование случая в XSL?
<xsl:variable name="upper">UPPER CASE</xsl:variable>
<xsl:variable name="lower" select="???"/>
6 ответов:
в XSLT 1.0 the
upper-case()
иlower-case()
функции недоступны. Если вы используете таблицу стилей 1.0, общий метод преобразования case -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>
XSLT 2.0 имеет
upper-case()
иlower-case()
функции. В случае XSLT 1.0, вы можете использоватьtranslate()
:<xsl:value-of select="translate("xslt", "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")" />
реализация .NET XSLT позволяет записывать пользовательские управляемые функции в таблицу стилей. Для нижнего регистра() это может быть:
<?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>
предположим, что может быть медленным, но все же приемлемым.
Не забудьте включить поддержку скриптов для преобразования:
// 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());