Показать сообщение отдельно
  #1  
Старый 20.03.2018, 03:04
Аватар для LIONSMILE
LIONSMILE LIONSMILE вне форума
Новичок
 
Регистрация: 19.03.2018
Сообщения: 51
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как обработать трек навигатора в формате XML

Доброго времени суток!
Обращаюсь к Вам за помощью, если конечно Вам не трудно, то помогите решить следующую проблему, с я которой столкнулся. Мне необходимо из файла (Навигатора с расширением 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;

Спасибо заранее!
Ответить с цитированием