I lost a hard drive a few weeks ago, and with it my up-to-date MP3 collection.
Luckily I had a backup of most of the MP3′s, but I wanted to find out exactly which MP3′s I had recovered and which ones I was missing. I knew the iTunes library is stored in an XML formatted file, but I would need to write something to read it and extract out the filenames of the individual MP3 files and then verify if they existed.
I have been using LINQ quite a bit lately on various projects, but only LINQ to SQL. I knew of LINQ to XML, but now I had a real reason to learn it.
First I looked at the iTunes library format. Here’s a snippet of the beginning of my file:
< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Major Version</key><integer>1</integer>
<key>Minor Version</key><integer>1</integer>
<key>Application Version</key><string>7.6.2</string>
<key>Features</key><integer>5</integer>
<key>Show Content Ratings</key>
<true />
<key>Music Folder</key><string>file://localhost/C:/Documents%20and%20Settings/chujanen/My%20Documents/My%20Music/iTunes/iTunes%20Music/</string>
<key>Library Persistent ID</key><string>54F22391EB807F23</string>
<key>Tracks</key>
</dict><dict>
<key>1666</key>
</dict><dict>
<key>Track ID</key><integer>1666</integer>
<key>Name</key><string>What's the Matter Here?</string>
<key>Artist</key><string>10,000 Maniacs</string>
<key>Album Artist</key><string>10,000 Maniacs</string>
<key>Composer</key><string>Natalie Merchant/Robert Buck</string>
<key>Album</key><string>In My Tribe</string>
<key>Genre</key><string>Rock</string>
<key>Kind</key><string>MPEG audio file</string>
<key>Size</key><integer>9318485</integer>
<key>Total Time</key><integer>291134</integer>
<key>Track Number</key><integer>1</integer>
<key>Year</key><integer>1987</integer>
<key>Date Modified</key><date>2005-03-09T07:31:09Z</date>
<key>Date Added</key><date>2007-07-20T17:21:36Z</date>
<key>Bit Rate</key><integer>256</integer>
<key>Sample Rate</key><integer>44100</integer>
<key>Comments</key><string></string>
<key>Persistent ID</key><string>54F22391EB807F38</string>
<key>Track Type</key><string>File</string>
key>Location<string>file://localhost/S:/mp3/10,000%20Maniacs/In%20My%20Tribe/01%20-%20What's%20the%20Matter%20Here%20.mp3</string>
<key>File Folder Count</key><integer>-1</integer>
<key>Library Folder Count</key><integer>-1</integer>
</dict>
<key>1667</key>
<dict>
<key>Track ID</key><integer>1667</integer>
<key>Name</key><string>Hey Jack Kerouac</string>
<key>Artist</key><string>10,000 Maniacs</string>
Read the rest of this entry »