Question

I'd like to make an application that removes duplicates from my wpl (Windows PlayList) files.

The wpl struct is something like this:

<?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>

This looks like standard XML file. How can I load the file and get the src value of each media tag? How can I remove specific media, in case of duplicates?

Thank you very much.

Was it helpful?

Solution

You have two options:

  1. Load the file using the System.Xml.XmlDocument class.
  2. Load the file using the System.Xml.Linq.XElement class.

The easiest is probably using XElement. (This is completely untested code.)

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");

OTHER TIPS

You can try something like this using Linq-to-XML (.NET 3.5 and up):

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");
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top