使用C#中的LINQ查询XML文件

4

我有一个针对XML文件的LINQ查询,它看起来像这样:

  IEnumerable<XElement> c = from cli in xEl.Elements(ns + "client") 
                                      where cli.Element(ns+"ID").Value == (((Client)cComboBox.SelectedItem).Id +"")
                                      select cli;

它运行良好。接下来我想迭代这些数据,所以我做了这个

           foreach (XElement el in c)
           {

           }

我的 XML 文件长这样:
 <client>
    <ID>1</ID>
    <name>Andrej</name>

通过这个迭代,我想提取客户端的值(id -> 1,name -> Andrej

我的猜测是在循环中间放置el.Element("name").Value,但是那样不起作用... 哦,顺便说一下:我是用C#做的...

我该怎么办?

顺便说一句,正如你所看到的,我对linq很陌生,所以我认为我偏离了正确的轨道...

任何帮助都将不胜感激! 谢谢!


抱歉,只是为了明确一下,您想获取具有id = 1或id => 1的元素吗? - Johnv2020
2个回答

2
如果我使用这段代码:
  public void Run()
  {
      string fileToLoad = this.GetType().Name + ".xml";

      XElement root = XElement.Load(fileToLoad);

      var selected = from cli in root.Elements("client")
          where cli.Element("ID").Value == "1"
          select cli;

      System.Console.WriteLine("Selected:");
      foreach (var d in selected)
          Console.WriteLine("{0}", d.ToString());

      System.Console.WriteLine("\nitems:");
      foreach (var d in selected)
      {
          Console.WriteLine("id: {0}", d.Element("ID"));
      }
  }

同时,这是源数据:

<root>
  <client>
    <ID>1</ID>
    <name>Andrej</name>
  </client>
  <client>
    <ID>2</ID>
    <name>William</name>
  </client>
  <client>
    <ID>3</ID>
    <name>Kate</name>
  </client>
</root>

然后...我得到了这个结果:
Selected:
<client>
  <ID>1</ID>
  <name>Andrej</name>
</client>

items:
id: <ID>1</ID>

1

你可以用一条语句完成它。我在转述你的陈述。只有选择语句真正发生了变化。

    var nameIdList = (from cli in client
where cli.ID == ID
select new { id=cli.ID, name=cli.name }).ToList();

我曾经遇到一个问题,需要将XmlNodes转换为XmlElements。以下是如何将其添加到您的扩展类中的好链接。http://blogs.msdn.com/b/ericwhite/archive/2008/12/22/convert-xelement-to-xmlnode-and-convert-xmlnode-to-xelement.aspx - JPM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接