2010-07-24 4 views
1

Donc, fondamentalement, je veux faire des objets « Songs » à partir d'iTunes Library.xml Le problème est que fichier XML ressemble plus .plist est un exemple:NSXMLParser. Comment analyser KVC-plist-thingamajig-like XML?

<key>56</key> 
    <dict> 
     <key>Track ID</key><integer>56</integer> 
     <key>Name</key><string>apple-ipad-video</string> 
     <key>Kind</key><string>QuickTime Movie</string> 
     <key>Size</key><integer>99552974</integer> 
     <key>Total Time</key><integer>440607</integer> 
     <key>Date Modified</key><date>2010-05-13T19:55:21Z</date> 
     <key>Date Added</key><date>2010-07-22T05:40:11Z</date> 
     <key>Bit Rate</key><integer>123</integer> 
     <key>Artwork Count</key><integer>1</integer> 
     <key>Persistent ID</key><string>EEC08DC8DE950DF9</string> 
     <key>Track Type</key><string>File</string> 
     <key>Has Video</key><true/> 
     <key>HD</key><false/> 
     <key>Video Width</key><integer>848</integer> 
     <key>Video Height</key><integer>480</integer> 
     <key>Movie</key><true/> 
     <key>Location</key><string>file://localhost/Users/User/Music/iTunes1/iTunes%20Media/Movies/apple-ipad-video-geo-alt1-ru-20100406_848x480/apple-ipad-video-geo-alt1-ru-20100406_848x480.mov</string> 
     <key>File Folder Count</key><integer>4</integer> 
     <key>Library Folder Count</key><integer>1</integer> 
    </dict> 
    <key>58</key> 

Comment puis-je analyser quand tous les éléments sont-ils identiques? J'ai besoin objet en sortie qui ressemble à ceci:

@interface Song : NSObject { 
    NSInteger *trackID; 
    NSString *name; 
    NSString *kind; 
    NSInteger *size; 
    ... 
} 

Tout le monde a des idées? Merci d'avance.

Répondre

2

Lisez-le comme un plist puis extrayez les données dont vous avez besoin.

Song *mySong = [[Song alloc]init]; 
NSString *filename = @"/path/to/the/file.xml"; 
NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile:filename]; 

NSLog(@"Read in plist file: %@", plist); 

[mySong setTrackID: [plist valueForKey:@"Track ID"]]; 
+0

Cela fonctionnerait pour un morceau je pense. Mais il y a des milliers de chansons dans ce xml, est-ce que je serai capable de faire tous les objets de la chanson à partir d'une seule pliste s'ils ont les mêmes clés? Je suis nouveau au code, ouais :) – Yuri

+0

@Yuri: NSArray a aussi une méthode 'arrayWithContentsOfFile:'. Vous avez seulement besoin d'un plist valide avec un ' 'comme élément racine. –

+0

OK, j'ai RTFM-ed un peu et a travaillé. Merci. – Yuri