根据 2 个值使用 Linq 分析 XML
本文关键字:Linq 分析 XML 根据 | 更新日期: 2023-09-27 18:32:32
我想知道如何使用 LinQ 在 c# 中解析我的 xml 文件,我做了很多研究,但没有我的确切案例。
所以这是我的 xml 代码:
<WindowsMediaPlayer>
<Playlist name="playlistdefouf">
<Element>
<type>Audio</type>
<name>lol</name>
</Element>
<Element>
<type>Video</type>
<name>tamere</name>
</Element>
</Playlist>
</WindowsMediaPlayer>
我也想创建一个函数,根据正确的播放列表验证歌曲是否存在(类型为 AND 名称)。
例如,如果我输入参数播放列表名称 = "播放列表defouf",类型 = "音频"并且名称 = "lol",我的函数将返回 1
我已经尝试做某事,但我想我迷路了。
XDocument xmlFile = XDocument.Load(Helper.xmlFolder + "/playlist.xml");
IEnumerable<XElement> elem = xmlFile.Root.Descendants();
IEnumerable<XElement> requete = from d in elem
where d.Name == "Playlist"
&& d.Attribute("name").Value == "playlistdefouf"
select d;
IEnumerable<XElement> requete2 = from d in requete.Descendants()
where d.Name == "Element"
select d;
IEnumerable<XElement> requete3 = from d in requete2.Descendants()
select d;
以下是检索具有特定类型和名称的播放列表的 IEnumerable 的方法:
XDocument xmlFile = XDocument.Load("playlists.xml");
var res = from playlist in xmlFile.Root.Elements("Playlist")
where
playlist.Attribute("name").Value == "playlistdefouf" &&
playlist.Element("Element").Element("type").Value == "Audio" &&
playlist.Element("Element").Element("name").Value == "lol"
select playlist;
您可以使用Count()
扩展方法获取播放列表的计数
res.Count();
或者,如果您想知道列表是否包含与参数匹配的任何元素,则可以使用 Extension 方法Any()
而不是 Count 来获取更具表现力的布尔值。
这会产生相同的结果,但我个人更喜欢这样构建:
var xml = XDocument.Load("playlist.xml");
var result = from playlist in xml.Descendants("Playlist")
where (string)playlist.Attribute("name") == "playlistdefouf"
from song in playlist.Descendants("Element")
where (string)song.Element("type") == "Audio" && (string)song.Element("name") == "lol"
select playlist;
然后,您可以使用 IEnumerable 扩展来获取所需的结果:
var count = result.Count();
var isExisting = result.Any();
var playlist = result.ToList();