2014-01-25 47 views
0

我試圖使用NSXMLR解析來自Wordpress RSS源的數據。我的問題是導出我的分析數據。到目前爲止,我有,在iOS中使用NSXML解析數據

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 

    currentElement = [elementName copy]; 

    if ([elementName isEqualToString:@"item"]){ 

     currentTitle = [[NSMutableString alloc] init]; 
     item = [[NSMutableDictionary alloc] init]; 
    } 

} 

該類

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 


    if ([elementName isEqualToString:@"item"]){ 
     [item setObject:currentTitle forKey:@"title"]; 
    } 

    [stories addObject:item]; 
} 


- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 

    if ([currentElement isEqualToString:@"title"]){ 
     [currentTitle appendString:string]; 
    } 

} 

的NSMutableArray *的故事; NSMutableDictionary * item;

所以在viewDidLoad中實現,我

//declare the object of allocated variable 
NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"URL"]];// URL that given to parse. 

//allocate memory for parser as well as 
xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData]; 
[xmlParserObject setDelegate:self]; 

//asking the xmlparser object to beggin with its parsing 
[xmlParserObject parse]; 



NSLog(@"%@", [item objectForKey:@"title"]); 

我的問題是,我只打印一個對象,我有倍數的元素。我怎樣才能讓它掃描它們中的每一個並將它們全部打印出來。

在此先感謝。

+0

什麼是「NSXMLR」? – matt

+0

我的不好,意思是說NSXML – outime

回答

1

如果我正確理解您的代碼,item保存當前解析的項目, 和數組stories保存所有項目。

所以,你必須分配stories陣列第一:

stories = [[NSMutableArray alloc] init]; 

然後你做解析(但你應該添加一個錯誤檢查):

NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"URL"]]; 
xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData]; 
[xmlParserObject setDelegate:self]; 
if (![xmlParserObject parse]) { 
    // Parsing failed, report error... 
} 

最後打印的內容陣列:

for (NSDictionary *story in stories) { 
    NSLog(@"%@", [story objectForKey:@"title"]); 
} 

didEndElement方法可能應該看起來像這樣:

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"item"]){ 
     [item setObject:currentTitle forKey:@"title"]; 
     [stories addObject:item]; // <-- MOVED INTO THE IF-BLOCK 
    } 
} 
+0

完美!謝謝 – outime

+0

它的工作!謝謝Martin – outime

+0

@ user3235632:不客氣! –