Objective-C解析XML文件
问题描述:
我遵循关于解析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:(空)
谁能帮助?谢谢,萨米。
答
该属性字典不是你要找的。
如果你有XML标签:
<dict foo="bar" baz="42">
然后在parser:didStartElement:...
回调:
-
elementName
将dict
-
attributeDict
将与2键值对的字典:“ foo“=>”bar“和”baz“=>”42“
由于您解析的是plist格式的xml文件,因此<dict>
没有任何属性。因此,attributesDict
是空的,并且[attributesDict objectForKey:@"name"]
返回nil
。
解析iTunes的xml文件的绝对简单的方法是:
NSDictionary *contents = [NSDictionary dictionaryWithContentsOfFile:path];
请记住,但是,这可能最终吃一吨的内存,完全杀死你的应用程序的性能。
但是,嘿,图书馆将被加载。 :)
好吧,是的,这是有道理的,你能帮我,我想编写一个应用程序与搜索字段,按钮和表视图,当用户键入一个字符串到搜索字段,并按下按钮的按钮调用方法,通过iTunes Music Library.xml文件搜索曲目名称或曲目的艺术家姓名中的字符串,并将结果显示在tableview中。你能告诉我如何去做,或者如果你有时间可以为我做?我知道有很多要问,但我真的被卡住了,谢谢Dave。 – Sami 2011-02-14 23:48:24