iPhone - NSScanner не разбирает - PullRequest
0 голосов
/ 12 июня 2011

Я использую этот метод для поиска первой пары <> в строке (содержимое XML):

NSScanner* scanner = [NSScanner scannerWithString:contentToParse];
int startPos = 0;
int endPos = 0;

// Open search
if ([scanner scanString:@"<" intoString:nil]) {
    startPos = [scanner scanLocation]-1;
    NSLog(@"found '<' at pos %i", startPos);

    // close search
    if ([scanner scanString:@">" intoString:nil]) {
        endPos = [scanner scanLocation]-1;
        NSLog(@"found '>' at pos %i", endPos);

        NSString* tag = [contentToParse substringWithRange:NSMakeRange(startPos, endPos-startPos)];
        NSLog(@"Tag found : %@", tag);
    }
}

но регистрируется только "найдено" <в позиции 0 ". Мой XML-контент содержит много много <> элементов ...

Почему этот метод не работает?

1 Ответ

3 голосов
/ 12 июня 2011

scanString:intoString: пытается отсканировать строковый параметр в текущем местоположении . Если такая строка отсутствует в текущем местоположении, она просто возвращает NO.

Возможно, вы захотите использовать scanUpToString:intoString: ( ссылка ) вместо этого, который сканирует продвижение местоположения сканирования до тех пор, пока не встретится данная строка.

NSScanner *scanner = [NSScanner scannerWithString:contentToParse];
// open search
[scanner scanUpToString:@"<" intoString:nil];
if (![scanner isAtEnd]) {
    [scanner scanString:@"<" intoString:nil];
    // close search
    NSString *tag = nil;
    [scanner scanUpToString:@">" intoString:&tag];
    if (![scanner isAtEnd]) {
        NSLog(@"Tag found : %@", tag);
    }
}
...