我想知道如何使用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>
我想制作一个功能,根据右侧播放列表验证歌曲是否存在(带有类型和名称)。
例如,如果我输入参数playlistname =&#34; playlistdefouf&#34;,输入=&#34;音频&#34;和名字=&#34; lol&#34;我的函数将返回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;
答案 0 :(得分:0)
以下是如何检索具有特定类型和名称的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来获取更具表现力的布尔值。
答案 1 :(得分:0)
这会产生相同的结果,但我个人更喜欢这样结构:
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();