/**
  * Open playlist by full path, including filename.
  * @param String $fullPath
  * @return Playlist
  */
 private function openPlaylist($fullPath)
 {
     $playlist = new Playlist();
     if ($fullPath) {
         $xml = @simplexml_load_file($fullPath, 'SimpleXMLElement', LIBXML_NOCDATA);
         if (!$xml) {
             throw new Exception("Error loading Playlist on '" . $fullPath . "'.");
         }
         $attributes = $xml->attributes();
         $playlist->setFilename((string) basename($fullPath));
         $playlist->setPath((string) dirname($fullPath));
         if ($attributes['name']) {
             $playlist->setName((string) $attributes['name']);
         }
         if ($attributes['description']) {
             $playlist->setDescription((string) $attributes['description']);
         }
         //Get playlist links
         foreach ($xml->children() as $second_gen) {
             $playlistLink = new PlaylistLink();
             //Get node attributes
             $attributes = $second_gen->attributes();
             $playlistLink->setKey((string) $attributes['key']);
             if ($attributes['type']) {
                 $playlistLink->setType((string) $attributes['type']);
             }
             if ($attributes['thumbnail']) {
                 $playlistLink->setThumbnail((string) $attributes['thumbnail']);
             }
             //Get child nodes
             if ($second_gen->title) {
                 $playlistLink->setTitle((string) $second_gen->title);
             }
             if ($second_gen->description) {
                 $playlistLink->setDescription((string) $second_gen->description);
             }
             if ($second_gen->format) {
                 $playlistLink->setFormat((string) $second_gen->format);
             }
             if ($second_gen->filename) {
                 $playlistLink->setFilename((string) $second_gen->filename);
             }
             if ($second_gen->link) {
                 $playlistLink->setLink((string) $second_gen->link);
             }
             if ($second_gen->language) {
                 $playlistLink->setLanguage((string) $second_gen->language);
             }
             //Get ids
             $order = 1;
             $second_gen = $second_gen->part;
             foreach ($second_gen->children() as $third_gen) {
                 $attributes = $third_gen->attributes();
                 if ($attributes['order']) {
                     $playlistLink->addId((int) $attributes['order'], (string) $third_gen);
                 } else {
                     ++$order;
                     $playlistLink->addId((int) $order, (string) $third_gen);
                 }
             }
             //Add link to playlist
             $playlist->addPlaylistLink($playlistLink);
         }
     }
     return $playlist;
 }