Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 766; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.008 с.) |