Подпишись на наш Twitter

Быть в курсе появления новых статей!

Ранее мы рассмотрели два варианта применения Linq, один это получение коллекции чисел, а второй получение коллекции объектов класса определенного пользователем (Customers).

Теперь мы прочитаем XML файл и выберем данные из него с помощью Linq.

Сачала нам нужно создать XML файл, который предоставит на данные, это будет коллекция покупателей из предыдущего примера. Откройте простой текстовый редактор и создайте XML файл с именем Customer.xml.



  
  
  

Вы можете легко увидеть те же данные, как и в предыдущей коллекции. Наша задача прочитать файл из программы и выполнить Linq запрос над данными.

Для начала создайте новое приложение для Windows Phone и возьмите разметку Xaml для Title Panel и Content Panel из предыдущего примера. В итоге вы получите готовый TextBlock и ListBox.

Вам надо добавить ссылку на System.Xml.Linq и добавить использование этого пространства имен в MainPage.xaml.cs с помощью using.

Добавьте Customer.xaml в ваш проект и добавьте следующую строчку в конструктор после InitializeComponent:

XDocument customers = XDocument.Load("Customers.xml");

Это все что надо сделать для загрузки файла в программу. Теперь вы готовы выполнить запрос над данными из XML файла. Получилось немного сложнее, чем в предыдущем примере. Здесь мы должны указать путь к соответствующему элементу, чтобы указать верхний элемент для Descendants типа Customer.

var query = from c in customers.Descendants("Customer");

Мы можем добавить фильтр (выражение where) для атрибута City значение которого равно Washington.

where c.Attribute( "City" ).Value == "Washington"

Если мы хотим получить все совпадающие с условием атрибуты из XML, то надо написать:

select c

Но это слишком много данных для отображения, поэтому создадим анонимный объект и укажем какие атрибуты, мы хотим видеть:

select new
{
   Name = c.Attribute( "FullName" ).Value,
   City = c.Attribute( "City" ).Value
};

Теперь мы пробежим по полученным результатам, добавляя каждый в список (Listbox). Пример code-behind кода:

using System.Linq;
using System.Xml.Linq;
using Microsoft.Phone.Controls;
 
namespace LinqToXML
{
   public partial class MainPage : PhoneApplicationPage
   {
      public MainPage( )
      {
         InitializeComponent( );
         XDocument customers = XDocument.Load( "Customers.xml" );
         var query = from c in customers.Descendants( "Customer" )
                     where c.Attribute( "City" ).Value == "Washington"
                     select new
                     {
                        Name = c.Attribute( "FullName" ).Value,
                        City = c.Attribute( "City" ).Value
                     };
 
         foreach ( var cust in query )
            TheListBox.Items.Add( cust );
      }
   }
}

Оригинал: Linq to XML




Дата публикации: 15.02.2011 15:00

Ярлыки: Linq, Tutorial, XML