![]() |
|
|
|
|
#1
|
||||
|
||||
|
Доброе время суток, господа. Прошу помочь мне с одной проблемой.
Итак, мне потребовалось использовать веб-API в программе, которую я пишу, а писака из меня, признать, так себе - неуч и самоучка. В итоге я смог освоиться с GET-запросами, но вот затык: из полученного XML-файла неизвестной длинны мне нужно выдирать ровно одну строчку в каждом подразделе. Подробнее. Само API: http://api.eve-central.com/api/marke...ystem=30000142 Итак, из каждого подраздела <type> нужно извлекать всего две вещи: его id (параметр) и графу /<type>/<buy>/<percentile>. И я представления не имею, как это сделать, даже после прочтения массы статей, найденных в гугле - каждая попытка что-то сделать заканчивалась провалом. Не могли бы вы мне на конкретном примере показать, как это можно сделать? Желательны указания на необходимые объявления и компоненты, которые нужно ставить. Заранее спасибо. |
|
#2
|
||||
|
||||
|
IXMLDocument
Можно даже выборки делать из XML. |
|
#3
|
||||
|
||||
|
MADMAN, я его установил, но мою проблему это не решило. Я всё равно не понимаю, как не пропарсить весь XML-файл и не вогнать его в Memo, а брать два конкретных параметра из каждой графы <type>.
UPD: Упс, я сначала усмотрел в сообщении ECXMLParser. Тем не менее, я в этой области и правда ни в зуб ногой. |
|
#4
|
||||
|
||||
|
для загрузки и парсинга xml очень удобно использовать IXMLHttpRequest.
|
|
#5
|
||||
|
||||
|
Я вот как загружал.
Код:
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
|
||||
|
||||
|
Код:
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; |