Запрос XML-файла с помощью LINQ на C#

#c# #xml #linq

#c# #xml #linq

Вопрос:

у меня есть запрос LINQ для моего XML-файла, и он выглядит следующим образом

   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 #..

Что мне делать?

кстати, 2: как вы можете видеть, я новичок в linq, поэтому, думаю, с этим я сбился с пути…

Любая помощь была бы оценена!! TNX!

Комментарии:

1. извините, просто для ясности, вы хотите получить элементы, которые имеют id = 1 или id => 1?

Ответ №1:

Если я использую этот код:

   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>
  

Ответ №2:

вы могли бы сделать это в одной инструкции. Я перефразирую ваше утверждение. На самом деле меняется только выбор.

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

Комментарии:

1. Также у меня возникла проблема, когда у меня были XmlNodes и мне нужно было преобразовать в XmlElements. Вот хорошая ссылка, показывающая, как добавить это в ваш класс расширений. blogs.msdn.com/b/ericwhite/archive/2008/12/22 /…