Andrey-w6 |
Дата: Среда, 10.08.2011, 17:31 | Сообщение # 1 | Добавить в цитатник [ ? ]
|
Новичок
Группа: Пользователи
Сообщений: 16
Репутация: 0
Замечания: 0%
Статус: Offline
|
Начнем с самого простого — с синтаксического анализа документа формата XML. Этот документ имеет четкую структуру и как нельзя лучше подходит для начала изучения парсинга. Еще один приятный момент — для парсинга XML нам пока даже не пригодится умение составлять регулярные выражения (это не значит, что их не надо знать ).
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%
Статус: Offline
|
Любопытная но заметь слабая статья использовать для парсига TXMLDocument думаю как то нелепо я бы юзал всё в переменной если приложение консоль то юзал бы как это делает Aндрей uses urlmon; Если бы это был интерфейс юзал бы idhttp Да и вообще статья на 3 без обид не полная!!!
|
|
|
|