2010-05-09 116 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"); 
}