2011-02-14 151 views
1

我遵循關於解析XML文件的快速教程,這就是我所擁有的。Objective-C解析XML文件

- (void)loadDataFromXML { 

    NSString* path = @"/Users/samichaudry/Music/iTunes/iTunes Music Library.xml"; 

    NSData* data = [NSData dataWithContentsOfFile: path]; 
    NSXMLParser* parser = [[NSXMLParser alloc] initWithData: data]; 

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

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

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

     NSString* name = [attributeDict valueForKey:@"name"];  
     NSString* artist = [attributeDict valueForKey:@"artist"];  
     NSLog(@"Name: %@, Artisit: %@", name, artist); 
    } 
} 

但在日誌中,我得到的是這約60倍;

2011-02-14 22:53:37.617 SearchLibrary [5218:A0F]產品名稱:(空), Artisit:(空)

誰能幫助?謝謝,薩米。

回答

3

該屬性字典不是你要找的。

如果你有XML標籤:

<dict foo="bar" baz="42"> 

然後在parser:didStartElement:...回調:

  • elementNamedict
  • attributeDict將與2鍵值對的字典:「 foo「=>」bar「和」baz「=>」42「

由於您解析的是plist格式的xml文件,因此<dict>沒有任何屬性。因此,attributesDict是空的,並且[attributesDict objectForKey:@"name"]返回nil

解析iTunes的xml文件的絕對簡單的方法是:

NSDictionary *contents = [NSDictionary dictionaryWithContentsOfFile:path]; 

請記住,但是,這可能最終吃一噸的內存,完全殺死你的應用程序的性能。

但是,嘿,圖書館將被加載。 :)

+0

好吧,是的,這是有道理的,你能幫我,我想編寫一個應用程序與搜索字段,按鈕和表視圖,當用戶鍵入一個字符串到搜索字段,並按下按鈕的按鈕調用方法,通過iTunes Music Library.xml文件搜索曲目名稱或曲目的藝術家姓名中的字符串,並將結果顯示在tableview中。你能告訴我如何去做,或者如果你有時間可以爲我做?我知道有很多要問,但我真的被卡住了,謝謝Dave。 – Sami 2011-02-14 23:48:24