Converting Case
Problem
You want to convert an uppercase string to lowercase or vice versa.
Solution
Use the XSLT translate( )
function. This code, for example,
converts from upper- to lowercase:
translate($input,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')
This example converts from lower- to uppercase:
translate($input, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')
Discussion
This recipe is, of course, trivial. However, I include it as an opportunity to discuss the solution’s shortcomings. Case conversion is trivial as long as your text is restricted to a single locale. In English, you rarely, if ever, need to deal with special characters containing accents or other complicated case conversions in which a single character must convert to two characters. The most common example is German, in which the lowercase “ß” is converted to an uppercase “SS”. Many modern programming languages provide case-conversion functions that are sensitive to locale, but XSLT does not support this concept directly. This is unfortunate, considering that XSLT has other features supporting internationalization.
A slight improvement can be made by defining general XML entities for each type conversion, as shown in the following example:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE stylesheet [ <!ENTITY UPPERCASE "ABCDEFGHIJKLMNOPQRSTUVWXYZ"> <!ENTITY LOWERCASE "abcdefghijklmnopqrstuvwxyz"> <!ENTITY UPPER_TO_LOWER " '&UPPERCASE;' , '&LOWERCASE;' "> <!ENTITY LOWER_TO_UPPER " '&LOWERCASE;' ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access