0

我正在使用这种方法将第一个 <> 对找到一个字符串(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);
    }
}

但仅记录“在 pos 0 找到 '<'”。我的 XML 内容包含许多 <> 项...

为什么这种方法不起作用?

4

1 回答 1

3

scanString:intoString:尝试在当前位置扫描字符串参数。如果当前位置不存在这样的字符串,则仅返回NO.

您可能想要使用scanUpToString:intoString:( reference ) 代替,它会扫描推进扫描位置,直到遇到给定的字符串。

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);
    }
}
于 2011-06-12T12:57:32.697 回答