C# XML X文档
C# XML XDocument
我正在用 C# 编写一个媒体播放器,所以我将播放列表保存在 XML 中,如下所示:
所以我想获取播放列表的属性 "name" 和媒体的属性 "path"。
我可以使用此代码获得两者:
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 仅过滤播放列表给定名称,在本例中为 Films.
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 中,如下所示:
所以我想获取播放列表的属性 "name" 和媒体的属性 "path"。
我可以使用此代码获得两者:
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 仅过滤播放列表给定名称,在本例中为 Films.
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);
}
}