2013-08-25 68 views
-6

,我有以下格式的XML:C#中的LINQ to XML子節點查詢

<?xml version="1.0" encoding="utf-8"?> 
<solution> 
    <file> 
    <song>foo1.mp3</song> 
    <listen> 
     <number>1</number> 
     <data> 
     <date>2013.08.21</date> 
     <user>user1</user> 
     <spec>foo</spec> 
     </data> 
    </listen> 
    <listen> 
     <number>2</number> 
     <data> 
     <date>2013.08.23</date> 
     <user>user2</user> 
     <spec>foo</spec> 
     </data> 
    </listen> 
    </file> 
    <file> 
    <song>foo2.mp3</song> 
    <listen> 
     <number>1</number> 
     <data> 
     <date>2013.08.21</date> 
     <user>user1</user> 
     <spec>foo</spec> 
     </data> 
    </listen> 
    <listen> 
     <number>2</number> 
     <data> 
     <date>2013.08.23</date> 
     <user>user2</user> 
     <spec>foo</spec> 
     </data> 
    </listen> 
    </file> 
</solution> 

如何查詢日期,用戶或規範,其中的歌曲和數量是可變的?

也許我可以改變XML文件格式或其他東西。

我正在使用c#。

例如,我想看到所有日期,聽着歌,或者聽誰的歌作爲第二

用戶謝謝

對於添加到列表框中的所有歌曲我使用:

var proj = from nodes in System.Xml.Linq.XElement.Load(foo.xml).Elements("file") select nodes; 

      if (proj != null) 
      { 
       foreach (var b in proj) 
       { 
        plist.Items.Add(b.Element("song").Value.Trim()); 
       } 
      } 

,但我不知道節目例如日期所有數字或用戶對歌曲foo和2號

+5

[?你嘗試過什麼(http://mattgemmell.com/2008/12/08/what-have-you-tried/ ) – BartoszKP

回答

0

怎麼你的意思是這樣的:

var song = "foo2.mp3"; 
var number = 2; 

var query = 
    from x in xd.Root.Elements("file") 
    where x.Element("song").Value == song 
    from y in x.Elements("listen") 
    where (int)y.Element("number") == number 
    select y.Element("data"); 

這將使你:

result