[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Программирование|Delphi|Pascal » Общие вопросы Delphi » Парсинг XML на дельфи. (Парсинг XML на дельфи.)
Парсинг XML на дельфи.
Andrey-w6 Дата: Среда, 10.08.2011, 17:31 | Сообщение # 1 | Добавить в цитатник [ ? ]
Новичок
Группа: Пользователи
Сообщений: 16
Награды: 0
Репутация: 0
Замечания: 0%
Статус: Offline
Начнем с самого простого — с синтаксического анализа документа формата XML. Этот документ имеет четкую структуру и как нельзя лучше подходит для начала изучения парсинга. Еще один приятный момент — для парсинга XML нам пока даже не пригодится умение составлять регулярные выражения (это не значит, что их не надо знать smile ).

XML — формат для хранения структурированных данных. Если вы лишь краем уха слышали про этот формат, но близко не сталкивались, прочитайте скучную, но полезную статью об XML на Wiki.
Для примера я буду использовать этот XML документ:http://newyorg.myminicity.com/xml
City — корневой элемент. Элементы: host, name, region, ranking и т.д.. Атрибуты: code (у элемента region, значение атрибута — "RU"), com, env, ind, sec, tra (атрибуты элемента bases, каждый атрибут имеет числовое значение). Обратите внимание, что bases — пустой элемент. Сходится с теорией?

Рассмотрим стандартный компонент Delphi, позволяющий работать с XML. Это TXMLDocument с вкладки Internet, с которой нам в будущем придется еще поработать.

Компонент можно положить на форму, а можно создавать динамически по мере надобности.

Итак, создаем форму, помещаем на нее компонент и 5 компонентов TEdit. В первый мы запишем содержимое элемента population, в 4 остальных — значения атрибутов ind, tra, sec, env. Все это делается чрезвычайно просто. В обработчике нажатия кнопки, например, пишем:
Code

XMLDocument1.LoadFromFile('http://newyorg.myminicity.com/xml');
XMLDocument1.Active := true;
Edit1.Text := XMLDocument1.DocumentElement.ChildNodes['population'].Text;
Edit2.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['bases'].Attributes['ind']);
Edit3.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['bases'].Attributes['tra']);
Edit4.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['bases'].Attributes['sec']);
Edit5.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['bases'].Attributes['env']);
XMLDocument1.Active := false;


Подведем итоги.

Чтение атрибута узла можно произвести так:
Root.GetAttribute(WideString('NodeName'));
(где Root — элемент)

Так работать можно, естественно, не только с корневым элементом, но и с его дочерними узлами:
Root.ChildNodes.Nodes[i].GetAttribute(WideString('NodeName'));

Запись атрибута:
Root.SetAttribute(WideString('NodeName'),'NodeValue');

Количество дочерних узлов определяем:
Root.ChildNodes.Count;

Вот и все. Мы получили все, что хотели, плюс начальные навыки работы с компонентом TXMLDocument.
 

demon Дата: Вторник, 11.10.2011, 21:44 | Сообщение # 2 | Добавить в цитатник [ ? ]
Новичок
Группа: Друзья
Сообщений: 10
Награды: 0
Репутация: 0
Замечания: 0%
Статус: Offline
Любопытная но заметь слабая статья использовать для парсига TXMLDocument думаю как то нелепо я бы юзал всё в переменной если приложение консоль то юзал бы как это делает Aндрей uses urlmon; Если бы это был интерфейс юзал бы idhttp Да и вообще статья на 3 без обид не полная!!!
 

Форум » Программирование|Delphi|Pascal » Общие вопросы Delphi » Парсинг XML на дельфи. (Парсинг XML на дельфи.)
  • Страница 1 из 1
  • 1
Поиск:

 
Ваш логин: Ваш пароль: