Программирование >>  Программирование с использованием ajax 

1 ... 309 310 311 [ 312 ] 313 314 315 ... 396


6. Нажмите <Enter> для выхода из программы и очистки экрана консоли. Если использовалась комбинация <Ctrl+F5> (запуск без отладки), может понадобиться нажать <Enter> два раза.

Описание полученных результатов

Как известно из объяснений каждого из методов запроса, вы модифицируете только что созданный пример запроса LINQ to XML, чтобы использовать его. Каждый из этих запросов возвращает коллекцию элементов LINQ to XML или атрибутов объектов, имеющих свойство Name, так что конструкция select просто возвращает это имя для вывода на консоль в цикле foreach:

var queryResult = from с in customers.Elements() select c.Name;

foreach (var item in queryResult) (

Console.WriteLine(item);

Код такого типа можно использовать поначалу при разработке и отладке программы, чтобы увидеть, что возвращает запрос. Позднее вывод будет модифицирован для отображения бизнес-результатов, которые выглядят более осмысленно для конечных пользователей.

Использование членов запроса

в этом разделе мы рассмотрим доступные члены запроса LINQto XML. Затем они будут испробованы все по очереди с использованием файла NorthwindCustomerOrders. xml в качестве источника данных.

Elements ()

Первый применяемый метод запроса LINQ to XML - это член Elements () класса XDocument. Этот член также доступен в классе XElement.

Elements () возвращает набор элементов первого уровня в документе XML или его фрагменте. В корректном документе XML, таком как представлен в только что созданном файле NorthwindCustomerOrders. xml, есть только один элемент первого уровня, который называется Customers:

<?xml version= l.О encoding= utf-8 ?> <customers>

</customers>

Все прочие элементы являются дочерними по отношению к customers, поэтому Elements () возвращает только один элемент:

Элементы в загруженном документе: customers

Фрагмент XML может содержать множество элементов первого уровня, но обычно он более полезен для опроса дочерних элементов, которые мы рассмотрим ниже, в разделе, посвященном Descendants ().

Descendants ()

Следующий метод запроса LINQ to XML, который мы рассмотрим - это член Descendants () класса XDocument. Этот член также доступен в классе XElement.



Descendants () возвращает двумерный список всех дочерних элементов (на всех уровнях) в документе XML или его фрагменте. Попробуйте модифицировать пример

BegVCSharp 29-5-QueryXML следующим образом:

Console.WriteLine( Все дочерние элементы в документе: );

queryResult =

from с in customers.Descendants О

select c.Name; foreach (var item in queryResult) {

Console.WriteLine(item);

Откомпилируйте пример и запустите. Вы увидите повторяющиеся имена элементов customer и order, как они находятся в документе:

Все дочерние элементы в документе:

customer

order

order

customer order

customer order

order order

Для продолжения нажмите Enter:

Вывод прокрутится на экране, так что вы, возможно, не увидите его начала. Это отражает тот факт, что файл NorthwindCustomerOrders. xml содержит только одни элементы customer и order под корневым элементом customers:

<?xml version= l.О encoding= utf-8 ?> <customers>

<customer ... [{[SPACE]}]> <order.../> <order.../>

</customer> <customer...> <order.../>

Вывод можно сделать более управляемым, добавив к обработке результатов LINQ-операцию Distinct ():

Console.WriteLine ( Все неповторяпциеся дочерние элементы в документе: ) ;

var queryResult =

from с in customers.Descendants О

select c.Name; foreach (var item in queryResult. Distinct ())

Результирующий список содержит только неповторяющиеся имена элементов:

Все неповторяющиеся дочерние элементы в документе:

customers

customer

order

Для продолжения нажмите Enter:



Это очень полезно для исследования структуры документа перед началом работы с ним, но нахождение всех элементов - не та проблема, которую придется решать часто в завершенных производственных приложениях.

Более распространенный сценарий состоит в том, что необходимо будет искать элементы-наследники с определенным именем. Метод Descendants () имеет перегрузку, принимающую необходимое имя элемента в качестве строкового параметра, как показано ниже:

Console.WriteLine ( Наследники по имени customer : ) ;

var queryResult =

from с in customers.Descendants( customer )

select c.Name;

foreach (var item in queryResult) убираем Distinct () {

Console.WriteLine(item);

Это возвращает только элементы customers:

Наследники по имени customer:

customer

customer

customer

customer customer

Для продолжения нажмите Enter:

Ясно, что это более часто используемый запрос. Запрашивая список элементов известного типа, можно затем поискать определенные атрибуты, что будет показано далее.

Для полноты картины следует знать, что LINQ to XML также предлагает метод Ancestors О, противоположный методу Descendants (), который возвращает двумерный список всех элементов, находящихся выше заданного в структуре XML-документа. Он используется не так часто, как Descendants (), потому что разработчикам свойственно начинать обработку документов XML с корневого элемента и затем переходить от него к листовым уровням дерева элементов и атрибутов. Свойство Parent, которое указывает на единственного предка уровнем выше, используется чаще.

Attributes О

Следующий метод запроса LINQ to XML, который мы рассмотрим - это член Attributes О. Он возвращает все атрибуты текущего выбранного элемента. Чтобы увидеть, как работает этот метод, попробуйте модифицировать пример BegVCSharp 29-5-QueryXML следующим образом:

Console.WriteLine ( Атрибуты наследников по имени customer : ) ;

var queryResult =

from с in customers.Descendants ( customer ) .Attributes ()

select c.Name; foreach (var item in queryResult) {

Console.WriteLine (item) ;

Откомпилируйте и выполните его. Вы должны увидеть имена атрибутов элементов customer:



1 ... 309 310 311 [ 312 ] 313 314 315 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика