【发布时间】:2012-02-22 13:34:30
【问题描述】:
我正在使用 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,这解决了问题,但导致各种不需要的空格和回车出现。关于为什么会发生这种情况以及我可以做些什么来解决它的任何想法?
更新
所以我根据下面 Dirk 的回答更新了我的代码,这似乎做得很好。
- (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];
}
}
【问题讨论】:
-
是从“Sonny”的前面剪掉还是从“is”的末尾剪掉。换句话说,输入是什么?尝试添加 NSLog(@"appending|%@|",string);到循环。
标签: objective-c ios nsstring nsxmlparser