2010-07-24 88 views
1

所以,基本上我想從iTunes Library.xml 問題使物體「詩經」是XML文件看起來更像的.plist 下面是一個例子:NSXMLParser。如何解析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> 

如何可以解析它的時候所有的元素都是一樣的? 我需要在輸出對象,看起來是這樣的:

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

任何人有想法? 在此先感謝。

回答

2

將它作爲plist讀取,然後從中提取所需的數據。

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

這將工作的一首歌我認爲。但是在這個xml中有成千上萬首歌曲,如果他們有相同的密鑰,我是否可以製作單個plist中的所有歌曲對象?我是新來的代碼,是:) – Yuri 2010-07-24 11:00:11

+0

@Yuri:NSArray也有一個'arrayWithContentsOfFile:'方法。你只需要一個以''作爲根元素的有效plist。 – 2010-07-24 12:21:43

+0

好吧,我已經RTFM了一下,並解決了它。謝謝。 – Yuri 2010-07-25 07:31:31