Search code examples
iphoneiosxmluilabelcdata

Subscript and Superscripts in CDATA of an xml file. Using UILabel to display the parsed XML contents


I need to display subscripts and superscripts (only arabic numerals) within a UILabel. The data is taken from an XML file. Here is the snippet of XML file:

<text><![CDATA[Hello World X\u00B2 World Hello]]></text>

Its supposed to display X2 (2 as superscript). When I read the string from the NSXMLParser and display it in the UILabel, it displays it as X\u00B2. Any ideas on how to make it work?


Solution

  • I think you can do something like this, assuming the CDATA contents have been read into an NSString and passed into this function:

    -(NSString *)removeUnicodeEscapes:(NSString *)stringWithUnicodeEscapes {
        unichar codeValue;
        NSMutableString *result = [stringWithUnicodeEscapes mutableCopy];
        NSRange unicodeLocation = [result rangeOfString:@"\\u"];
        while (unicodeLocation.location != NSNotFound) {
    
            // Get the 4-character hex code
            NSRange charCodeRange = NSMakeRange(unicodeLocation.location + 2, 4);
            NSString *charCode = [result substringWithRange:charCodeRange];
            [[NSScanner scannerWithString:charCode] scanHexInt:&codeValue];
    
            // Convert it to an NSString and replace in original string
            NSString *unicodeChar = [NSString stringWithFormat:%C", codeValue];
            NSRange replacementRange = NSMakeRange(unicodeLocation.location, 6);
            [result replaceCharactersInRange:replacementRange withString:unicodeChar];
    
            unicodeLocation = [result rangeOfString:@"\\u"];
        }
    
        return result;
    }
    

    I haven't had a chance to try this out, but I think the basic approach would work