2010-05-09 3 views
3

Je voudrais créer une application qui supprime les doublons de mes fichiers wpl (Windows PlayList).Suppression de balises XML spécifiques

Le struct WPL est quelque chose comme ceci:

<?wpl version="1.0"?> 
<smil> 
    <head> 
     <meta name="Generator" content="Microsoft Windows Media Player -- 11.0.5721.5145"/> 
     <meta name="AverageRating" content="55"/> 
     <meta name="TotalDuration" content="229844"/> 
     <meta name="ItemCount" content="978"/> 
     <author/> 
     <title>english</title> 
    </head> 
    <body> 
     <seq> 
      <media src="D:\Anime con 2006\Shits\30 Seconds to Mars - 30 Seconds to Mars\30 Seconds to Mars - Capricorn.mp3" tid="{BCC6E6B9-D0F3-449C-91A9-C6EEBD92FFAE}" cid="{D38701EF-1764-4331-A332-50B5CA690104}"/> 
      <media src="E:\emule.incoming\Ke$ha - Coming Unglued.mp3" tid="{E2DB18E5-0449-4FE3-BA09-9DDE18B523B1}"/> 
      <media src="E:\emule.incoming\Lady Gaga - Bad Romance.mp3" tid="{274BD12B-5E79-4165-9314-00DB045D4CD8}"/> 
      <media src="E:\emule.incoming\David Guetta -Sexy Bitch Feat. Akon.mp3" tid="{46DA1363-3DFB-4030-A7A9-88E13DF30677}"/> 
     </seq> 
    </body> 
</smil> 

Cela ressemble à un fichier XML standard. Comment puis-je charger le fichier et obtenir la valeur src de chaque étiquette de média? Comment puis-je supprimer un support spécifique, en cas de doublons?

Merci beaucoup.

+0

Il pourrait être utile d'afficher un exemple avec plus d'une étiquette de média. –

+0

J'ai inséré une seule étiquette de média car ils sont tous familiers. J'en ai ajouté d'autres maintenant – iTayb

Répondre

3

Vous avez deux options:

  1. Charger le fichier en utilisant la classe System.Xml.XmlDocument. Chargez le fichier en utilisant la classe System.Xml.Linq.XElement.

Le plus simple est probablement l'utilisation de XElement. (Ceci est du code non testé complètement.)

XElement document = XElement.Load("path to the file"); 

List<string> sources = new List<string>(); 
foreach (var mediaElement in document.Descendents("media")) 
{ 
    if (sources.Contains((string)mediaElement.Attributes("src")) 
    { 
     mediaElement.Remove(); 
    } 
    else 
    { 
     sources.Add((string)mediaElement.Attributes("src")); 
    } 
} 

document.Save("path to the file"); 
2

Vous pouvez essayer quelque chose comme ceci en utilisant LINQ à XML (.NET 3.5 et plus):

XDocument doc = XDocument.Load("yourfile.xml"); 

var mediaTags = doc.Descendants("media"); 
int num = mediaTags.Count(); 

// find one particular node, e.g. by inspecting it's "tid" attribute 
XNode node = mediaTags 
     .FirstOrDefault(x => x.Attribute("tid").Value == 
           "{274BD12B-5E79-4165-9314-00DB045D4CD8}"); 

// if node is found - remove it from XDocument 
if(node != null) 
{ 
    node.Remove(); 

    // save file again 
    doc.Save("Your-new-file.xml"); 
} 
Questions connexes