Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.12.2012, 16:59
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию Парсинг XML

Доброе время суток, господа. Прошу помочь мне с одной проблемой.

Итак, мне потребовалось использовать веб-API в программе, которую я пишу, а писака из меня, признать, так себе - неуч и самоучка. В итоге я смог освоиться с GET-запросами, но вот затык: из полученного XML-файла неизвестной длинны мне нужно выдирать ровно одну строчку в каждом подразделе. Подробнее.

Само API: http://api.eve-central.com/api/marke...ystem=30000142

Итак, из каждого подраздела <type> нужно извлекать всего две вещи: его id (параметр) и графу /<type>/<buy>/<percentile>. И я представления не имею, как это сделать, даже после прочтения массы статей, найденных в гугле - каждая попытка что-то сделать заканчивалась провалом. Не могли бы вы мне на конкретном примере показать, как это можно сделать? Желательны указания на необходимые объявления и компоненты, которые нужно ставить. Заранее спасибо.
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #2  
Старый 17.12.2012, 17:00
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

IXMLDocument

Можно даже выборки делать из XML.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 17.12.2012, 17:04
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

MADMAN, я его установил, но мою проблему это не решило. Я всё равно не понимаю, как не пропарсить весь XML-файл и не вогнать его в Memo, а брать два конкретных параметра из каждой графы <type>.

UPD: Упс, я сначала усмотрел в сообщении ECXMLParser. Тем не менее, я в этой области и правда ни в зуб ногой.
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #4  
Старый 17.12.2012, 18:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

для загрузки и парсинга xml очень удобно использовать IXMLHttpRequest.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 17.12.2012, 18:58
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

Я вот как загружал.

Код:
Address:='http://api.eve-central.com/api/marketstat?typeid=34&usesystem=30000142';
idhttp.Host:='http://eve-central.com';

stream:=TMemoryStream.Create;
stream.Seek(0,soBeginning);
stream.Position:=0;
idhttp.Get(Address,stream);

XMLDocument1.Active:=True;
XMLDocument1.LoadFromStream(stream);
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #6  
Старый 17.12.2012, 19:31
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
FXMLHttpRequest: IXMLHttpRequest;
XMLDOMDocument: IXMLDOMDocument;
uid: String;
...
FXMLHttpRequest:=CreateComObject(CLASS_XMLHTTPRequest) as IXMLHttpRequest;
FXMLHttpRequest.open('GET', 'http://server/xml', False, '', '');
FXMLHttpRequest.send('');
if FXMLHttpRequest.status<>200 then raise ...
XMLDOMDocument:=XMLHttpRequest.responseXML as IXMLDOMDocument;
if XMLDOMDocument.parseError.errorCode<>0 then raise ...
uid:=XMLDOMDocument.getElementsByTagName('uid').item[0].text;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 17.12.2012, 21:00
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

Вопросы по коду.
Цитата:
IXMLHttpRequest
IXMLDOMDocument
Это что ещё за зверь? Какая-то сторонняя библиотека?
Цитата:
uid:=XMLDOMDocument.getElementsByTagName('uid').it em[0].text;
Обрати внимание, что мне нужно не каждое значение <percentile>, а только находящееся в /<type>/<buy>/, и кроме него нужно получать параметр <type> "id". В общем-то, я вижу здесь только альтернативный способ получения этой самой XML-страницы, но не код её парсинга.

Ну братцы, ну помогите уже набросать процедуру выдирания этих переменных из XML, благо он у вас на виду. Я задам вопросы по непонятным местам и все будут счастливы же.

UPD: Хотя, в общем, можно получать первый и каждый последующий через два тег, но, может, всё-таки не извращаться и воспользоваться более традиционными средствами? Например, я не понимаю, как обратиться к дочерней ноде дочерней ноды.
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!

Последний раз редактировалось EvilRussian, 17.12.2012 в 21:02.
Ответить с цитированием
  #8  
Старый 17.12.2012, 21:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в google бы хоть их вбил:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
заметь, все для полного парсинга есть. и находящихся где-то и атрибутов...
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 17.12.2012, 22:08
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

Можно ссылку на скачку? Я что-то нашёл, но явно не то.
Также желательна помощь в написании кода. Проверите то, что я напишу?
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #10  
Старый 18.12.2012, 08:21
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от EvilRussian
Можно ссылку на скачку?
ничего скачивать не нужно. описания интерфейсов даны выше. добавь только модуль msxml в uses.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025