Разбор XML-файлов в .NET
Заметил я вот какую странную вещь – мало я пишу про ASP.NET, несмотря на то, что сам я в основном программирую именно под ASP.NET. И решил я начинать исправлять эту ситуацию потихоньку. И теперь в нашем блоге будет появляться все больше статей, посвященных ASP.NET, да и вообще технологии .NET. И сегодня будет именно такая статья. Посвящена она работе с XML-файлами.
Вы уже наверное заметили, что я люблю парсить XML-файлы. Да просто формат этот очень уж удобный для передачи и хранения различных данных. Взять вот хотя бы тот же gismeteo-информер, который я уже успел распарсить несколькими различными методами. И все эти методы касались языка JavaScript. А теперь попробуем распарсить его и в .NET. Но давайте уж возьмем не сам по себе информер, а кое-какие другие XML-данные с сайта gismeteo.
Исходные данные: Mozilla с установленным FireBug, открытая в нем страница http://informer.gismeteo.ru/getcode/xml.php. Видите внизу три списка, соответственно: стран, регионов и городов? Так вот, когда Вы в нем выбираете страну, то в списки регионов и городов загружаются регионы и города выбранной страны. При этом происходит запрос на сервер gismeteo вот такого вида: http://informer.gismeteo.ru/getcode/index.php. При этом, в POST-параметрах запроса передаются параметры: a1=156 (для регионов), a2n=156 (для городов). 156 – это код России в справочниках gismeteo.
А назад мы получаем XML-файл вот такого вида (здесь я приведу лишь кусок файла):
<cities> <city value="11845" old_id="99855">Абаза</city> <city value="4723" old_id="29865">Абакан</city> <city value="4659" old_id="29485">Абан</city> <city value="4546" old_id="28581">Абатский</city> <city value="4607" old_id="28815">Абдулино</city> <city value="11657" old_id="99666">Абинск</city> <city value="12874" old_id="89157">Автуры</city> <city value="3967" old_id="23383">Агата</city> </cities>
Итак захотел я распарсить именно этот файл. Скажу даже зачем мне это нужно. А вот нужно мне по названию города на русском языке получить соответствующий XML-документ с данными о погоде в этом городе. А XML этот лежит по вот такому пути: http://informer.gismeteo.ru/xml/99855_1.xml , где 99855 – это аттрибут old_id нужного мне города. Понятно, что разобранный файл я сохраню затем в базу данных, откуда и буду выбирать айдишники нужных мне городов. Наверное, можно было попросить эту базу у gismeteo, но я так и не нашел на их сайте работающих e-mail’ов. 🙂 Да и не ищем мы легких путей. Будем самостоятельно парсить их базу .
Итак, вот готовый код для разбора подобного рода XML-файла:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.XPath; using System.IO; namespace ParseXML { class Program { static void Main(string[] args) { // Собственно XML string xml = @" <cities> <city value=""11845"" old_id=""99855"">Абаза</city> <city value=""4723"" old_id=""29865"">Абакан</city> <city value=""4659"" old_id=""29485"">Абан</city> <city value=""4546"" old_id=""28581"">Абатский</city> <city value=""4607"" old_id=""28815"">Абдулино</city> <city value=""11657"" old_id=""99666"">Абинск</city> <city value=""12874"" old_id=""89157"">Автуры</city> <city value=""3967"" old_id=""23383"">Агата</city> </cities>"; // ЗАгружаем строку в XPathDocument XPathDocument xPathDoc = new XPathDocument(new StringReader(xml)); XPathNavigator xPathNav = xPathDoc.CreateNavigator(); // Выбираем нужные узлы XPathNodeIterator xPathIter = xPathNav.Select("/cities/city"); // Пробегаем по всем узлам foreach (XPathNavigator nav in xPathIter) { // Метод GetAttribute извлекает аттрибут узла int id = Int32.Parse(nav.GetAttribute("value", "")); int old_id = Int32.Parse(nav.GetAttribute("old_id", "")); // Свойство Value узла дает нам содержимое XML-узла, то есть строку, // которая содержится между открывающим и закрывающим XML-тегами Console.WriteLine("{0} \t id={1}, \t http://informer.gismeteo.ru/xml/{2}_1.xml", nav.Value, id, old_id); } Console.ReadLine(); } } }
Вот и все. Думаю, что код этот очень простой и в дополнительном комментировании не нуждается.
Кстати, скачать бесплатно мобильные игры java Вы можете на сайте mobi4uk4a.ru. Я скачал себе набор пасьянсов, теперь есть чем заняться пока еду в метро.
Нам и нашим четвероногим друзьям нужна квалифицированная ветеринарная помощь, ведь только в этом случае можно быть уверенным, что Ваш домашний любимец будет здоров и проживет долгую жизнь рядом с Вами. Не стоит надеяться на “авось”, если Ваш питомец заболел, и ни в коем случае нельзя заниматься самолечением – сразу идите в ветеринарную клинику “Биоконтроль”
На днях нашел замечательный ресурс посвященный фрилансу. Софт, книги, статьи для вебмастера – здесь есть все необходимое для того, чтобы Ваша работа в сфере web доставляла Вам истинное удовольствие.
В тему: