![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Доброго времени суток!
Обращаюсь к Вам за помощью, если конечно Вам не трудно, то помогите решить следующую проблему, с я которой столкнулся. Мне необходимо из файла (Навигатора с расширением GPX) который имеет структуру XML вывести данные в StringGrid. Образец файла: Код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <gpx xmlns="http://www.topografix.com/GPX/1/1" creator="Caucasia.ru - http://www.caucasia.ru" version="1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> <trk> <name>1648</name> <desc>Caucasia.ru track log 1648</desc> <trkseg> <trkpt lat="44.001403" lon="40.138943"> <ele>682.668861253353</ele> <time>2018-02-16T06:17:04Z</time> </trkpt> <trkpt lat="44.001431" lon="40.138931"> <ele>678.371128992928</ele> <time>2018-02-16T06:17:28Z</time> </trkpt> </trkseg> </trk> </gpx> Как добраться по веткам к атрибутам, прочитать их и вывести в StringGrid я разобрался. Но здесь у меня возникло два вопроса и как это сделать я не могу разобраться. 1. Атрибуты lat=" " и lon=" ", которые находятся в тэге <trkpt> затем начинают повторятся неоднократно в DOM-дереве файла и их может быть большое количество. Я смог считать только атрибуты из первой строки и записать их в StringGrid. Как прочитать все атрибуты lat=" " и lon=" ", находящиеся в тэге <trkpt>, который повторяется? 2. Как вывести правильно прочитанные данные в StringGrid, в столбцы 2 и 3, так как в первый столбец буду внесены значения, выбираемые в Combobox? Т.е. проще говоря я не могу запустить цикл обработки атрибутов тэгов с одинаковыми названиями, потом все данные правильно записать в массив и вывести в таблицу. Код того что у меня получилось: Код:
procedure TForm1.Button1Click(Sender: TObject); begin XMLDocument1.LoadFromFile('D:\XML\1648.xml'); XMLDocument1.Active := true; StringGrid1.RowCount:=StringGrid1.RowCount+1; StringGrid1.Cells[0,StringGrid1.RowCount-1]:=ComboBox1.Text; StringGrid1.Cells[1,StringGrid1.RowCount-1]:=VarToStr(XMLDocument1.DocumentElement.ChildNodes['trk'].ChildNodes['trkseg'].ChildNodes['trkpt'].Attributes['lat']); StringGrid1.Cells[2,StringGrid1.RowCount-1]:=VarToStr(XMLDocument1.DocumentElement.ChildNodes['trk'].ChildNodes['trkseg'].ChildNodes['trkpt'].Attributes['lon']); XMLDocument1.Active := false; end; procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[0,0]:= 'Код объекта'; StringGrid1.Cells[1,0]:= 'Широта'; StringGrid1.Cells[2,0]:= 'Долгота'; end; Спасибо заранее! Последний раз редактировалось LIONSMILE, 20.03.2018 в 04:39. |