Reputation: 12743
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.
Upvotes: 3
Views: 2242
Reputation: 42516
You have two options:
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");
Upvotes: 3
Reputation: 754618
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");
}
Upvotes: 2