DHeckeler wrote:
I've never done this before. What should I be looking for in the XML file? Thank you!
XML is a text file, and is readable. Each field in an XML file is tagged, and related fields (such as each playlist entry) are nested.
Here is a hunk of the XML of an exported playlist, showing part of one track within the playlist:
<key>6842</key>
<dict>
<key>Track ID</key><integer>6842</integer>
<key>Name</key><string>Espacio Sideral</string>
<key>Artist</key><string>Jesse & Joy</string>
<key>Album Artist</key><string>Jesse & Joy</string>
<key>Composer</key><string>Jesse Huerta & Joy Huerta</string>
... {stuff here deleted } ...
<key>Apple Music</key><true/>
<key>Location</key><string>file:///Users/mrhoffman/Music/iTunes/iTunes%20Music/Apple%20Music/Compilations/Jesse%20&%20Joy/03%20Espacio%20Sideral.m4p</string>
<key>File Folder Count</key><integer>5</integer>
<key>Library Folder Count</key><integer>1</integer>
</dict>
Each track will have information containing the full file name of the file containing the music.
From a test XML created and exported here (from a consolidated music library, which means stuff isn't located all over), the file location info from the XML file looks like this:
<key>Location</key><string>file:///Users/mrhoffman/Music/iTunes/iTunes%20Music/Apple%20Music/Compilations/Jesse%20&%20Joy/03%20Espacio%20Sideral.m4p</string>
This location is a standard URL, like those that work with a web browser. (This uses standard URL encoding too, which means the %20 is a space, and & is an & ampersand character.)
In this example, the file:/// means the location is a file, a colon and three slashes immediately following means no host name is specified; that the referenced location is local. If you see entries with a host name between the second and third slashes, that particular track is not located locally. It's on a file server or host somewhere, and that could conceivably be the local host accessed remotely.
An example of a remote file specification for a file served by the host fileserver.example.com looks like this:
file://fileserver.example.com/Users/mrhoffman {rest of path here}
You can use a search tool in your preferred editor, or a command-line tool such as grep, to search for just the location entries from the file, which will make this all less to look at.
The following is an example of using the grep tool available in zsh and other command line shells to search for the location entries for the tracks included in the playlist XML file named Jesse y Joy.xml :
% grep -i ">location<" "/Users/mrhoffman/Documents/Jesse y Joy.xml"
... {stuff expurated} ...
<key>Location</key><string>file:///Users/mrhoffman/Music/iTunes/iTunes%20Music/Apple%20Music/Compilations/Jesse%20&%20Joy/03%20Espacio%20Sideral.m4p</string>
... {stuff expurated} ...
mrhoffman@cupertino ~ %
There are quite probably better tools for managing enormous libraries too, or at least for reading and processing XML playlist files.
TL;DR: look for locations in the XML that don't include a string starting with file:///