2011-06-12 67 views
0

我用這個方法查找第<>耦合到一個字符串(XML內容):iPhone - NSScanner不解析

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內容包含很多很多<>項目...

爲什麼該方法不起作用?

回答

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); 
    } 
} 
+0

謝謝。但是爲什麼'[scanner scanUpToString:@「<」intoString:nil]; 如果(真)..............'工作(日誌很好),爲什麼|如果([掃描程序scanUpToString:@「<」intoString:nil])..............不要(沒有一個單一的日誌到控制檯)? – Oliver 2011-06-12 17:34:30

+0

'[scanner scanUpToString:@「<」intoString:nil]'返回NO ...奇怪?我沒有改變charactersToBeSkipped ...提示:我有一個 Oliver 2011-06-12 17:37:47

+1

@Oliver'scanUpToString:intoString:'returns'YES' **如果掃描器掃描任何字符**。如果你在開頭有一個「<」字符,它會返回「NO」。你不想使用這個方法的返回值來檢查它是否找到了字符串。使用'![掃描儀isAtEnd]'就像我的例子。 – albertamg 2011-06-12 17:59:37