Анализ файла XML Objective-C - PullRequest
       8

Анализ файла XML Objective-C

1 голос
/ 15 февраля 2011

Я выполнил краткое руководство по синтаксическому анализу 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: (ноль)

Кто-нибудь может помочь? Спасибо, Сами.

1 Ответ

3 голосов
/ 15 февраля 2011

Атрибут dict - это не то, что вы ищете.

Если у вас есть тег XML:

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

Затем в parser:didStartElement:... обратном вызове:

  • elementName будет dict
  • attributeDict будет словарём с 2 парами ключ-значение: "foo" => "bar" и "baz" => "42"

Поскольку вы анализируете xml-файл в формате plist, <dict> не имеет никаких атрибутов. Следовательно, attributesDict пусто, а [attributesDict objectForKey:@"name"] возвращает nil.

Абсолютно простой способ анализа XML-файла iTunes:

NSDictionary *contents = [NSDictionary dictionaryWithContentsOfFile:path];

Имейте в виду, однако, что это может в конечном итоге съесть метрическую тонну памяти и полностью снизить производительность вашего приложения.

Но эй, библиотека будет загружена. :)

...