Думал что-то сложное, но вы, как всегда проделали основную работу самостоятельно и обошлось всё вроде малой кровью, вот с небольшими добавками ваш обработчик жима восьмой кнопки
Код:
procedure TForm1.Button8Click(Sender: TObject);
var
i: integer;
iRoot, iNode: IXMLNode;
begin
XMLDocument2.Active := True; // актвирируем XML документ
XMLDocument2.Options := XMLDocument2.Options + [doNodeAutoIndent] -
[doAutoSave]; // отключаем форматирование и автосохранение документа
// Создаем служебный заголовок
XMLDocument2.Version := '1.0'; // Указываем версию документа
XMLDocument2.Encoding := 'windows-1251'; // Указываем кодировку для русского языка
// Создаем корневой узел документа
iRoot := XMLDocument2.AddChild('Document_Element'); // root узел документа
// Создаем шапку документа с атрибутами
iNode := iRoot.AddChild('HEAD'); // Название узла
iNode.Attributes['ObjectCount'] := IntToStr(StringGrid2.RowCount + StringGrid1.RowCount);
// Количество всех узлов "OBJECT"
iNode.Attributes['SC'] := Edit1.Text; // Атрибут масштаб
iNode.Attributes['Razr'] := Edit10.Text; // Атрибут разрешение
iNode.Attributes['Project'] := Edit3.Text; // Атрибут проекция
for i := 0 to StringGrid2.RowCount-1 do
begin
iNode:= iRoot.AddChild('OBJ'); //Название узла
iNode.Attributes['РЕГИОН'] := StringGrid2.Rows[i][0]; //Атрибут регион
iNode.Attributes['CountC'] := '1'; //Атрибут количества контуров (по умолчанию равен 1)
iNode.Attributes['CountP'] := '1'; //Атрибут количества точек (по умолчанию равен 1)
iNode.Attributes['Latitude'] := StringGrid2.Rows[i][1]; //Атрибут широта (записываем данные из Srtinggrid)
iNode.Attributes['Longitude'] := StringGrid2.Rows[i][2]; //Атрибут долгота (записываем данные из Srtinggrid)
end;
for i := 0 to StringGrid1.RowCount-1 do
begin
iNode:= iRoot.AddChild('OBJ'); //Название узла
iNode.Attributes['РЕГИОН'] := StringGrid1.Rows[i][0]; //Атрибут регион
iNode.Attributes['CountC'] := '1'; //Атрибут количества контуров (по умолчанию равен 1)
iNode.Attributes['CountP'] := '1'; //Атрибут количества точек (по умолчанию равен 1)
iNode.Attributes['Latitude'] := StringGrid1.Rows[i][1]; //Атрибут широта (записываем данные из Srtinggrid)
iNode.Attributes['Longitude'] := StringGrid1.Rows[i][2]; //Атрибут долгота (записываем данные из Srtinggrid)
end;
ShowMessage('Найтройки созданы. Сохраните результаты.');
Button3.Enabled:= true;
end;
теперь сливает данные из двух сеток в один общий блок, посмотрите пжлст, мож надо было в разные их пихать, но вроде без разницы это
З.Ы. Косяк только что вылез - между данными разных сеток и в конце пролезают теги-пустышки, думаю, это из-за того, что в StringGridах есть последняя пустая строка, нужно или её грохать, или тогда в forах считать до StringGridХ.RowCount-2 do...