xml文件的CDATA中的下标和上标。使用UILabel显示已解析的XML内容

时间:2012-03-03 00:17:37

标签: iphone ios xml uilabel cdata

我需要在UILabel中显示下标和上标(只有阿拉伯数字)。数据来自XML文件。这是XML文件的片段:

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

它应该显示X2(2为上标)。当我从NSXMLParser读取字符串并将其显示在UILabel中时,它将其显示为X \ u00B2。关于如何使其发挥作用的任何想法?

3 个答案:

答案 0 :(得分:2)

我认为你可以这样做,假设CDATA内容已被读入NSString并传入此函数:

-(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;
}

我没有机会尝试这一点,但我认为基本方法可行

答案 1 :(得分:1)

\u00B2不是任何字符的XML编码。显然你的数据源已经定义了他们自己的编码方案(坦率地说,这是非常愚蠢的,因为XML能够使用CDATA块之外的实体直接对这些编码进行编码)。

在任何情况下,您都必须编写自己的解析器来处理\u####并将其转换为正确的字符。

答案 2 :(得分:0)

我向同事提问,他给了我一个简单明了的解决方法。我在这里描述它,以防其他人也陷入困境。

首先转到this link。它有一个所有下标和上标的列表。例如,就我而言,我点击了“上标0”。在以下详细说明“上标0”的HTML页面中,转到“Java数据”部分并复制“⁰”。您可以直接将其放在XML中,也可以在obj-c中编写一个简单的正则表达式,用“⁰”替换\ u00B2。你会得到很好的X⁰。对您可能想要显示的任何上标或下标执行相同操作。