2012-05-27 47 views
1

我正在開發一個需要從XML文件中獲取數據的應用程序。某些節點有很多字,我已經使用這個功能的一個問題:NSXMLParser問題:不要獲取所有數據?

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
} 

例如,對於一個項目的描述節點,我將只得到20-30最後一個字符,而我會得到200或300.

我用NSLog檢查過,看來問題來自這裏。你知道什麼是錯的嗎?

感謝您的任何建議。

回答

2

SAX解析器不保證一次獲取所有字符。您可能會收到來自任何給定塊的字符塊的多個調用;你的代碼應該將它們連接成單個字符串。

解析器對象可能會發送委託給幾個解析器:foundCharacters:messages來報告元素的字符。由於字符串可能只是當前元素的總字符內容的一部分,因此您應該將其附加到當前字符累積,直到元素更改。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    if ([qualifiedName isEqualToString:@"myTag"]) { 
     buf = [NSMutableString string]; 
    } 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([qualifiedName isEqualToString:@"myTag"]) { 
     buf = [buf stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
     NSLog(@"Got %@", buf); 
    } 
} 

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [buf appendString:string]; 
} 
+0

感謝您的回答。你可以給我一個代碼示例什麼應該替代stringByTrimmingCharactersInSet:獲取字符一個接一個或塊一塊? – Rob

+1

您應該將裁剪代碼移動到委託的「parser:didEndElement:namespaceURI:qualifiedName:'方法中。在「start element」方法中,你應該清除緩衝區,在'foundCharacters'方法中,你應該簡單地通過調用'appendString:'將'string'追加到一個可變字符串緩衝區。 – dasblinkenlight

+0

我會試試這個,謝謝。 – Rob