Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Извлечение значения элемента из XML-документаСодержание книги
Поиск на нашем сайте
В данном примере, решая задачу, мы получили строку XML-данных, например от удаленной Web-службы, обеспечивающей прогнозом погоды. В этой текстовой XML-строке содержатся метеорологические показатели на заданный нами район для текущей даты. В данной задаче мы извлекаем из этих XML-данных только значение температуры. Несколько слов о структуре XML-документа (рис. 19.7). Рисунок 19.7 - Содержимое XML-файла с метеорологическими показателями Как видно, XML-документ начинается с XML-объявления (XML declaration), в котором содержится информация о версии (version information parameter). А далее весь XML-документ состоит из вложенных друг в друга элементов. Элемент — это блок разметки между начальным тегом, например <Город>, и конечным тегом </Город>. Самый внешний элемент, в данном случае — это тег <МетеорологическиеПоказатели>, его называют корневым элементом (root element). Как видите, этот корневой элемент содержит в себе все показатели, и, таким образом, глубина вложенности этой иерархии равна двум. Вообще говоря, глубина вложенности такого XML-дерева может быть практически любой. Итак, задача поставлена, сущность XML-данных понятна, приступаем к решению задачи. Для этой цели после запуска Visual Studio 2010 выберем проект шаблона Windows Forms Application, укажем имя Name — Linq3. Далее, попав в конструктор формы, из панели элементов Toolbox (Панель элементов) перетащим текстовое поле TextBox для вывода в него строки с данными XML и значения температуры из соответствующего элемента XML-дерева. Поскольку мы предполагаем вывод в текстовое поле не одной, а нескольких строчек, в свойствах объекта textBox1 укажем true напротив свойства Multiline. Затем на вкладке программного кода введем текст, представленный в листинге 19.6. Листинг 19.6. Извлечение значения элемента из XML-данных // Дана строка XML, содержащая прогнозные метеорологические показатели для // г. Москвы на заданную дату. Программа извлекает из корневого элемента // XML-документа значение температуры элемента "Температура": using System.Windows.Forms; //Другие директивы using удалены, поскольку они не используются в данной программе namespace Linq3 { public partial class Form1: Form { public Form1() { InitializeComponent(); this.Text = "LINQ-запрос к XML-данным"; textBox1.Multiline = true; string СтрокаXML = @"<?xml version=""1.0""?> <МетеорологическиеПоказатели> <Город>Москва</Город> <Дата>2010.05.15 06:30 UTC</Дата> <Температура> 64 F (18 C)</Температура> <Ветер>Сев-Вост 8 м/сек</Ветер> <Видимость>12 км</Видимость> <Влажность> 72%</Влажность> <Давление>760 мм рт ст</Давление> </МетеорологическиеПоказатели>"; // Загрузка корневого элемента из строки, содержащей XML: var КорневойЭлемент = System.Xml.Linq.XElement.Parse(СтрокаXML); // Или корневой элемент XML-документа получаем через файл: // Записываем строку, содержащую XML в файл: // System.IO.File.WriteAllText("ПоказателиПогоды.xml", СтрокаXML); // Загружаем корневой элемент XML: // var КорневойЭлемент = System.Xml.Linq. // XElement.Load("ПоказателиПогоды.xml"); // Из корневого элемента извлекаем вложенный в него элемент // "Температура" и получаем соответствующее значение (Value) этого // элемента: string Температура = КорневойЭлемент.Element("Температура").Value; textBox1.Text = "Строка XML:\r\n\r\n" + СтрокаXML + "\r\n\r\n"; textBox1.Text += "Значение температуры = " + Температура; } } } В начале текста программы задаем текстовую строку, содержащую XML- данные. Далее, используя метод Parse класса XElement пространства имен Linq, получаем корневой элемент XML-документа. В комментарии показано, как можно получить корневой элемент через запись/чтение XML-файла. Затем с помощью метода Element извлекаем значение (Value) элемента температура, которое выводим в текстовое поле. Фрагмент работы программы приведен на рис. 19.8. Рисунок 19.8 - Извлечение значения элемента из XML-документа
Рисунок 19.9 - Представление XML-данных в виде таблицы в MS Excel Убедиться в работоспособности программы можно, открыв решение Linq3.sln папки Linq3. Теперь решим похожую задачу по извлечению значения элемента, но пусть XML-данные представлены в другой форме, а именно каждый метеорологический показатель вложим в один и тот же элемент <Показатель> </Показатель>, в этом случае глубина вложенности элементов будет уже равна трем (см. листинг 19.7). Естественно спросить: что мы будем с этого иметь? Дело в том, что если соответствующий XML-файл открыть с помощью табличного редактора MS Excel, то мы сможем увидеть эти XML-данные в виде наглядной таблицы, даже не ссылаясь на таблицу стилей — файл XSLT (не путать с XLS-файлом), см. рис. 19.9. Теперь для получения значения температуры удобно воспользоваться типовым LINQ-запросом (листинг 19.7). Листинг 19.7. Извлечение значения элемента из XML-данных // Дана строка XML, которая содержит прогнозные метеорологические показатели для // г. Москвы на заданную дату. При этом каждый метеорологический показатель вложен // в один и тот же элемент <Показатель> </Показатель>. Это обеспечивает удобный // просмотр соответствующего XML-файла в MS Excel в виде таблицы. Программа находит // в корневом элементе данного XML-документа элемент "Температура" и извлекает из // него значение температуры. using System.Windows.Forms; using System.Linq; // Другие директивы using удалены, поскольку они не используются в данной программе namespace Linq4 { public partial class Form1: Form { public Form1() { InitializeComponent(); this.Text = "LINQ-запрос к XML-данным"; textBox1.Multiline = false; // Инициализация XML-строки: string СтрокаXML = @"<?xml version=""1.0""?> <МетеорологическиеПоказатели> <Показатель> <Город>Москва</Город> </Показатель> <Показатель> <Дата>2010.05.15 06:30 UTC</Дата> </Показатель> <Показатель> <Температура> 64 F (18 C)</Температура> </Показатель> <Показатель> <Ветер>Сев-Вост 8 м/сек</Ветер> </Показатель> <Показатель> <Видимость>12 км</Видимость> </Показатель> <Показатель> <Влажность> 72%</Влажность> </Показатель> <Показатель> <Давление>760 мм рт ст</Давление> </Показатель> </МетеорологическиеПоказатели>"; var КорневойЭлемент = System.Xml.Linq.XElement.Parse(СтрокаXML); // Или корневой элемент получаем через файл: // Записываем строку, содержащую XML в файл: // System.IO.File.WriteAllText("ПоказателиПогоды2.xml", СтрокаXML); // Загружаем корневой элемент: // var КорневойЭлемент = System.Xml.Linq.XElement.Load( // "ПоказателиПогоды2.xml"); // Запрос - это коллекция (список) строк, куда извлекаем значение // (Value) элемента "Температура": var Запрос = from x in КорневойЭлемент.Elements("Показатель") from y in x.Elements("Температура") select y.Value; // Таких строк в коллекции Запрос - одна textBox1.Text = "Значение температуры = "; foreach (var x in Запрос) textBox1.Text = textBox1.Text + x; } } } Как видно из программного кода, поиск организован в двух уровнях (два предложения from), сначала выбор в коллекцию всех элементов Показатель, а затем из этой коллекции поиск элементов Температура. Результат запроса записывается в коллекцию строк, где имеем ровно одну строку. Фрагмент работы программы показан на рис. 19.10. Рисунок 19.10 - LINQ-запрос к XML-документу Убедиться в работоспособности программы можно, открыв решение Linq4.sln из папки Linq4.
|
||||
Последнее изменение этой страницы: 2016-04-26; просмотров: 658; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.50.1 (0.007 с.) |