Разбор XML-файлов в .NET

Вячеслав Гринин, February 27, 2010

Заметил я вот какую странную вещь – мало я пишу про 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 доставляла Вам истинное удовольствие.

В тему:

1комментарий

Спасибо, очень помогло.

Андрей, September 26, 2013 4:19 pm Reply
Ваше имя
Ваш email*
Ваш сайт
Текст вашего комментария:

Поиск по блогу:
Подписаться:
Популярные:
Облако тегов:
Разное:
Счетчик: