xml + delphi

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

Добрый день.

Пишу приложение, в которое засылаются данные в виде xml. Есть ли в Delphi специальные... ну не знаю, инструменты, компоненты, функции, которые помогают с этим разобраться? Или придется с ним воевать вручную?
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Не разобрались?
Чтобы получать данные можно создать слушающий сокет.
Данные ожидать лучше в отдельном потоке, особенно если будете работать с сокетами в блокирующем режиме.
(если во время ожидания данных ничего делать не надо, то дополнительный поток конечно можно не делать).
Имеет смысл так же получать сначала длину данных, а потом уже сами данные.
Так Вы сможете определить, что все данные полученны (поскольку данные могут идти частями) и приступить к обработке данных.
После получения данных, чтобы облегчить себе жизнь при работе с XML, можно использовать компонент XMLDocument с вкладки Internet (он входит в поставку Delphi 7). Можно загрузить полученные данные в свойство XMLDocument.XML.Text. И затем если при переводе свойства XMLDocument.Active в True возникнет исключение - то скорее всего загруженный текст не является валидным XML.
Принцип работы аналогичен работе с деревом, если Вы работали с HTML-структурой в js или с TreeView в Delphi то проблем не возникнет.
Вот вкратце:
- нод = узел;
- есть текущий нод (sibling);
- у него может быть нод-родитель (parent);
- у него могут быть ноды-дети (child);
Можно переходить от узла к узлу в любом направлении.
Главный нод - XMLDocument.Document (если содержится нод с кодировкой, то XMLDocument.Document.ChildNodes[1] ).
Обратите внимание, что типы нодов бывают разные (гляньте TNodeType).
И нод не соответствует тегу в документе. Т.е. один тег может быть представлен несколькими нодами.
Нет религии выше истины
Ответить