Я использую NSXMLParser
для разбора RSS-канала. Но у меня странное поведение, которое, я считаю, сузилось до stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]
.
Если у меня есть такое предложение:
Здравствуйте, меня зовут "Сонни".
Это будет отображаться так:
Здравствуйте, меня зовут "Сонни".
Вот мой foundCharacters
метод:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentNodeContent)
currentNodeContent = [[NSMutableString alloc] initWithString:string];
else
{
[currentNodeContent appendString:string];
NSString *trimmedString = currentNodeContent;
trimmedString = [trimmedString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[currentNodeContent setString:trimmedString];
}
}
Я попытался изменить whitespaceAndNewlineCharacterSet
на newlineCharacterSet
, что устранило проблему, но привело к появлению всех видов нежелательных пробелов и возвратов каретки. Любые мысли о том, почему это происходит и что я могу сделать, чтобы это исправить?
UPDATE
Итак, я обновил свой код, основываясь на ответе Дирка, приведенном ниже, похоже, это хорошо сработало.
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementname isEqualToString:@"item"])
{
[comments addObject:currentComment];
currentComment = nil;
}
NSString *trimmedString = [tempString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[currentNodeContent setString:trimmedString];
tempString = nil;
currentNodeContent = nil;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if(!currentNodeContent) {
currentNodeContent = [[NSMutableString alloc] initWithString:string];
tempString = [[NSMutableString alloc] init];
} else {
[tempString appendString:string];
}
}