nsmutabledictionary用强调单词返回不正确的值



我正在尝试从xml获取字符串 nsdata *xmldata = [请求响应despondata];

NSString *stringData = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
loginParsingDelegate *loginResultParser = [[loginParsingDelegate alloc] init];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:loginResultParser];
[parser parse];
 NSString *filePath = [NSString stringWithFormat:@"%@/conf.plist", DOCUMENTS_FOLDER] ;
NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] init];
   NSString *city = [parsingResult objectForKey:@"city"];

但是当有口音时,这是错误的...示例: sao paulo =" sao paulo",但圣保罗我得到了"âpaulo"

怎么了?XML返回正确...

我已经使用简单的XML字符串

启动了您的代码
<city>São Paulo</city>

看起来您在代表中没有正确处理字符。对于此XML - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string实际上被称为两次:首次使用" S",第二次与"âo paulo。您应该处理此类情况,因为无论如何都不能保证此方法为您提供完整的字符串。

解析器:fundchanter:

由解析器对象发送以提供其委托 代表当前元素字符的全部或 part

更新:

一个非常简单的例子。给定XML

<cities>
    <city>São Paulo</city>
    <city>Rio de Janeiro</city>
    <city>Salvador</city>
</cities>

我们可以像这样做一个解析器

@implementation ParserClass {
    NSMutableString *elementText;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    elementText = nil; // we are not handling elements other than "city"
    if ([elementName isEqualToString:@"city"]) {
        elementText = [NSMutableString new]; // prepare an empty string for city name
    }
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    [elementText appendString:string]; // append new characters to the element text
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    // element did end - string now contains text of the element
    if ([elementName isEqualToString:@"city"]) {
        NSString *cityName = [elementText copy]; // now we have a full city name
        ...
    }
}
...
@end

请注意,这是不是一个通用代码来解析任何XML。如果您了解萨克斯解析的工作原理,那么您当然可以写一个。

最新更新