繁体   English   中英

删除特定的XML标记

[英]Removing specific XML tags

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

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值? 如果出现重复,我该如何删除特定媒体?

非常感谢你。

您有两种选择:

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

您可以使用Linq-to-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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM