2011-07-04 83 views
0

目前我正在試圖解析我的XML字符串表示,我得到它傳遞給ASIHTTPRequest方法 *我的服務器上我的PHP腳本回來 - (空)requestFinished:(ASIHTTPRequest )請求需要幫助使用的NSXMLParser與ASIHTTPRequest

我想使用NSXMLParser來解析這個XML,到目前爲止我已經得到了一切和運行,請參閱代碼我是如何做到這一點,但是我遇到的問題是它似乎正在訪問* - (無效)解析器:(NSXMLParser *)解析器foundCharacters:(NSString )string {方法多次..當我只希望它訪問它一次,並返回值。任何想法,爲什麼會發生這將不勝感激。

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    // Use when fetching text 
    NSString *responseString = [request responseString]; 
    NSData *xData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 
    //myCode.text = responseString; 
    //NSLog(@" response %@", responseString); 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xData]; 

    [parser setDelegate:self]; 
    [parser parse]; 
    [parser release]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
    if ([elementName isEqual:@"code"]) { 
     NSLog(@"Found title!"); 
     titleString = [[NSMutableString alloc] init]; 
    } 
} 


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    [titleString appendString:string]; 
    NSLog(@"the code string =%@", titleString); 

} 

// EDITTED :::::

我忘了添加此委託方法,它是最後被調用,將輸出的最終結果。我之所以說它不工作的原因是因爲我在方法名稱中寫了一些錯誤......現在所有的東西都修好了,並且完美地工作。

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqual:@"code"]) { 
     //NSLog(@"ended title: %@", titleString); 
     //Pass code over to animation 
     [self parseCodeForAnimation:titleString]; 

     [titleString release]; 
     titleString = nil; 
    } 

} 

回答

1

通常,SAX解析器會多次調用foundCharacters方法,這主要取決於被解析數據的內容。你所能做的就是以正確處理這種方式編寫你的應用程序。通常情況下,你可以通過保持類似NSMutableData或NSMutableString的東西並在每次調用foundCharacters時追加它。當您收到一個表示不會將更多數據作爲此元素的一部分發送的結束標記時,會將可變內容轉儲爲字符串,存儲它,並重置下一組數據的緩衝區。

+0

是的,我明白你的意思了。男人有什麼痛苦的,必須這樣編碼...我甚至不知道這是否會與我想要實現的。因爲一旦我有了代碼,我需要將它傳遞給另一個將動畫響應的方法..唯一的原因是解析器:foundCharacters:執行三次它將導致錯誤... –

+0

我想我只是想我做錯了什麼......我沒有使用解析器:namespaceURI:qualifiedName:delegate method ..從這裏我可以將值傳遞給我的動畫方法...但是,在嘗試這樣做是出於某種原因我不能調用這個方法..將繼續試圖通過這個。 –