使用Linq根据2个值解析XML

时间:2014-11-29 23:27:07

标签: c# xml linq parsing

我想知道如何使用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;

2 个答案:

答案 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();