![]() |
|
|
#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; |
|
#7
|
||||
|
||||
|
Вопросы по коду.
Цитата:
Цитата:
Ну братцы, ну помогите уже набросать процедуру выдирания этих переменных из XML, благо он у вас на виду. Я задам вопросы по непонятным местам и все будут счастливы же. UPD: Хотя, в общем, можно получать первый и каждый последующий через два тег, но, может, всё-таки не извращаться и воспользоваться более традиционными средствами? Например, я не понимаю, как обратиться к дочерней ноде дочерней ноды. Последний раз редактировалось EvilRussian, 17.12.2012 в 21:02. |
|
#8
|
||||
|
||||
|
в google бы хоть их вбил:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx заметь, все для полного парсинга есть. и находящихся где-то и атрибутов... |
|
#9
|
||||
|
||||
|
Можно ссылку на скачку? Я что-то нашёл, но явно не то.
Также желательна помощь в написании кода. Проверите то, что я напишу? |
|
#10
|
||||
|
||||
|
Цитата:
|