【问题标题】:c# linq to xml subnodes query [closed]c# linq to xml 子节点查询
【发布时间】:2013-08-25 08:43:12
【问题描述】:

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

【问题讨论】:

标签: c# xml linq


【解决方案1】:

你的意思是这样的:

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

这会给你:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多