2012-12-19 61 views
4

所以我想掃描大型XML文件(40MB),而據我瞭解,我應該使用的NSXMLParser,以減少內存佔用。我想檢查每首歌的情況,如果它通過了所有條件,請將歌曲寫入新的XML文件。解析iTunes資料庫XML可可

我可以用的NSXMLParser加載並執行文件的一些基本的閱讀。所以我想知道如何將每首歌曲保存爲臨時變量?什麼樣的對象應該被保存爲(我假設可變的東西,所以我可以繼續添加更多的歌曲到文件之前,我把它寫入文件)。

<key>Tracks</key> 
<dict> 
    <key>11072</key> 
    <dict> 
     <key>Track ID</key><integer>1107</integer> 
     <key>Name</key><string>Kids with Guns (Hot Chip Remix)</string> 
     <key>Artist</key><string>Gorillaz</string> 
     <key>Album</key><string>D-Sides</string> 
     <key>Genre</key><string>Britpop</string> 
     <key>Kind</key><string>MPEG audio file</string> 
     <key>Size</key><integer>844299</integer> 
     <key>Total Time</key><integer>42971</integer> 
     <key>Disc Number</key><integer>2</integer> 
     <key>Disc Count</key><integer>2</integer> 
     <key>Track Number</key><integer>6</integer> 
     <key>Track Count</key><integer>9</integer> 
     <key>Year</key><integer>2007</integer> 
     <key>Date Modified</key><date>2008-10-30T02:44:58Z</date> 
     <key>Date Added</key><date>2007-12-25T21:54:16Z</date> 
     <key>Bit Rate</key><integer>153</integer> 
     <key>Sample Rate</key><integer>44100</integer> 
     <key>Comments</key><string> __FIXED__U74A0ECA</string> 
     <key>Play Count</key><integer>1</integer> 
     <key>Play Date</key><integer>3292750639</integer> 
     <key>Play Date UTC</key><date>2008-05-04T20:57:19Z</date> 
     <key>Skip Count</key><integer>1</integer> 
     <key>Skip Date</key><date>2008-02-09T06:17:30Z</date> 
     <key>Artwork Count</key><integer>2</integer> 
     <key>Persistent ID</key><string>74A0ECAC8D</string> 
     <key>Track Type</key><string>File</string> 
     <key>Location</key><string>file://xxxxx/x/iTunes/Music/Gorillaz/D-Sides/2-06%20Kids%20with%20Guns%20(Hot%20Chip%20Remix).mp3</string> 
     <key>File Folder Count</key><integer>5</integer> 
     <key>Library Folder Count</key><integer>1</integer> 
    </dict> 

回答

1

使用任何你喜歡的物體。你可以使用字典,或者你可以編寫自己的類,它反映了對你來說很方便的結構,並反映了你正在提取的數據的結構。一個明顯的技術是您的頂級解析器委託具有這是一個NSMutableArray所以你可以添加的東西出來,你獲得它們,然後調用者可以獲取所產生的價值,因爲我在此代碼做一個屬性:

NSURL* url = // obtain xml URL 
NSXMLParser* parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
MyPeopleParser* people = [[MyPeopleParser alloc] init]; 
[parser setDelegate: people]; 
[parser parse]; 

MyPeopleParser擁有的人一個NSMutableArray稱爲people。所以現在我們可以獲取該屬性的值(people.people,對此很抱歉)。該數組現在充滿了Person對象。但所有這些只是一個實現細節。如果你已經想出瞭如何使用NSXMLParser,那麼你已經在遊戲中領先了,剩下的就是肉汁。

我不太清楚你的意思寫文件什麼; XML 的一個文件。但是,在我的情況下,我使Person類可存檔,因此可以將Person對象的NSArray作爲.plist直接寫入磁盤。

+0

澄清。我想創建一個新的.xml文件(比如在我的桌面上)。使用原始XML文件中的一些歌曲。 截至目前我只是保存信息到一個臨時的字典,但其創造的字典中相同的格式origonal XML的新文件(我的桌面上)的問題林。 – urbanrider

+0

你有什麼問題?編寫XML比閱讀更容易,所以爲什麼你有困難?如果你問一個關於這些問題的完全不同的問題,也許會更好。請注意,XML不會輕鬆,直接地完全轉換爲任何對象類型,所以如果您只是爲了編寫XML而閱讀XML,那麼最好不要使用臨時變量:只是將所有內容都維持在「頭腦中」作爲XML整個時間。 – matt