-6

我有以下格式的 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 的用户

4

1 回答 1

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");

这会给你:

结果

于 2013-08-25T09:06:13.747 回答