C# XML X文档

标签 c# xml linq-to-xml

我正在用 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);
    }
}

关于C# XML X文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34611772/

相关文章:

c# - 缩略图视频 C#

java - JAXB 解码返回属性的空值

c# - 当 XElements 具有相同名称时如何使用 LINQ 查询获取 XElement 值

java - 调用对话框 : Not work on API 10

c# - 打印具有自定义行的数据表

c# - 读取xml属性

c# - Windows 窗体应用程序 C# 中的依赖注入(inject)

c# - 我可以在 .NET 应用程序中临时覆盖 DNS 解析吗?

c# - Ajax Post 将 null 传递给 Controller

java - 修复软键盘上方的布局