2011-02-14 98 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