簡體   English   中英

C#XML XDocument

[英]C# XML XDocument

我正在使用C#編寫媒體播放器,因此我將播放列表保存為XML,如下所示:

XML

所以我想得到播放列表“名稱”的屬性和媒體“路徑”的屬性。

我能夠使用這段代碼得到兩個:

var xdoc = XDocument.Load(@"mypath");

var names = from i in xdoc.Descendants("playlist")
            select new
            {
                Path = (string)i.Attribute("name")
            };

var paths = from i in xdoc.Descendants("media")
            select new
            {
                Path = (string)i.Attribute("path")
            };

foreach (var name in names)
{
    System.Diagnostics.Debug.WriteLine(name.Path);
    foreach (var path in paths)
        System.Diagnostics.Debug.WriteLine(path.Path);
}

所以我明白了:

電影

E:\Projets\CS - MyWindowsMediaPlayer\Example Medias\Music1.mp3
E:\Projets\CS - MyWindowsMediaPlayer\Example Medias\MusicInfos1.mp3
E:\Projets\CS - MyWindowsMediaPlayer\Example Medias\Video2.mp4
E:\Projets\CS - MyWindowsMediaPlayer\Example Medias\Video1.mp4
E:\Projets\CS - MyWindowsMediaPlayer\Example Medias\Video3.mp4

但我想按類別排序,例如只獲取與電影相對應的鏈接。

讓我們使用SelectMany和GroupBy的組合。

SelectMany將創建一個列表,其中包含播放列表名稱和媒體路徑的元組,然后我們使用GroupBy按播放列表名稱對此列表進行分組,最后我們可以使用Where僅過濾具有給定名稱的播放列表,這個案子, 電影

var xdoc = XDocument.Load(@"mypath");

var paths = xdoc.Descendants("playlist")
                .SelectMany(x => x.Descendants("media"), (pl, media) => Tuple.Create(pl.Attribute("name").Value, media.Attribute("path").Value))
                .GroupBy(x => x.Item1)
                .ToList();

foreach (var name in paths.Where(x => x.Key == "Films"))
{
    Console.WriteLine(name.Key);
    foreach (var tuple in name)
    {
        Console.WriteLine(tuple.Item2);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM