2010-05-09 200 views
3

我想创建一个从我的wpl(Windows PlayList)文件中删除重复项的应用程序。删除特定的XML标记

的WPL结构是这样的:

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

这看起来像标准的XML文件。我如何加载文件并获得每个媒体标签的值为src? 如何删除特定媒体,以防重复?

非常感谢。

+0

这可能是发布一个以上的媒体标签的例子是有用的。 – 2010-05-09 13:01:45

+0

我只插入了一个媒体标签,因为他们都很熟悉。我现在增加了一些 – iTayb 2010-05-09 13:04:19

回答

3

你有两个选择:

  1. 负载使用System.Xml.XmlDocument类的文件。
  2. 使用System.Xml.Linq.XElement类加载文件。

最简单的可能是使用XElement。 (这是完全未经测试的代码。

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

可以使用LINQ到XML(.NET 3.5及以上)尝试这样:

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