|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Как сформировать XML файл заданной стуктуры
Доброго времени суток!
Есть одно приложение, которое в своей работе использует файл POI в формате XML. Данные в этот файл (XML) переносятся из двух таблиц MS Excel. Все бы ничего, но возникла одна проблема, если строк в файлах MS Excel немного (10 - 20) то сформировать такой файл руками проблем нет, но если строк больше 100 и до N, то на это уходит не мало времени. Возникла идея написать небольшое приложение, которое как раз и будет считывать данные из таблиц MS Excel, а затем уже из этих данных формировать файл найстроек в XML. Проект: Создание_XML.ZIP Проблем с написанием сего творения вроде бы нет, кроме одной. Я не могу понять как считанные с двух файлов Excel данные, обернуть в нужные тэги. Коротко о самой программе: в Treeview выбирается тип POI. Затем загружается стандарный файл из другого приложения, из которого берутся данные для формирования первой строки XML файла. Далее открываются по очереди две таблицы Excel и данные заносятся в STRINGGRID1 и STRINGGRID2 соответственно. Теперь когда все заружено необходимо сформировать файл настроек. Саму стуктуру файла я сформировать могу, также и записать в нее первую строку, которая содержит информацию из файла-настроек. Далее должны по очереди в этот XML файл записываться данные из двух таблиц в атрибуты. Файлы настроек "navigator.nvg" и таблицы MS Excel "POI.xls" вложены в архив с проектом. Участок кода, в который должны записываться данные из STRINGGRID1 и STRINGGRID2. Код:
iNode2:= iRoot.AddChild('OBJECT'); iNode2.Attributes['Code'] := '0'; iNode2.Attributes['Desc_100'] := '0'; iNode2.Attributes['CountConturs'] := '1'; iNode2.Attributes['CountPoint'] := '1'; iNode2.Attributes['LatitudeD'] := '0'; iNode2.Attributes['LongitudeD'] := '0'; XMLDocument1.SaveToFile('Save.xml'); Как записать в атрибуты файла настроек в формате XML последовательно данные из двух таблиц MS Excel по структуре в проекте (415-420 строки)? Огромное спасибо заранее! |
#2
|
||||
|
||||
Сейчас в выхлопе получается *.xml с содержимым
Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
LIONSMILE (20.04.2018)
|
#3
|
||||
|
||||
Доброго времени суток!
Все правильно, он должен формироваться в такой последовательности. Код HTML:
Формирование результата должно быть следующим образом: Структура.jpg Каждую строку из каждой таблицы записываем в таком виде: <OBJ РЕГИОН="0" CountC="1" CountP="1" Latitude="0" Longitude="0"/> - где атрибуту Регион="ID" соответствует значение колонки ID, атрибуту Latitude="0" значение из колонки широта, и атрибуту Longitude="0" значение из колонки долгота. Разницы нет из какой таблицы и в какой последовательности будут они обернуты тэгами. Важно чтобы они были в такой струкутуре как показано на рисунке. Т.е. Root-узел (<Document_Element>) далее идет заголовок документа (<HEAD/>) и далее один за одним объекты из таблиц 1 и 2, при этом каждый объект должен быть отдельным и висеть на одной ветке с HEAD как на рисунке. Последний раз редактировалось LIONSMILE, 18.04.2018 в 04:30. |
#4
|
||||
|
||||
Принято к выполнению (тоже самое и в другой топке), только нужно время, на работе весной отгулов не дают Ну правда, удивляюсь такой детализации ТЗ, сразу ясность появилась, словно на горной дороге из облака вырулил, мне б уже на втором баллоне рисовать надоело бы )
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
LIONSMILE (20.04.2018)
|
#5
|
||||
|
||||
Спасибо большое! Я подожду конечно. Все люди и всех есть свои дела, я прекрасно понимаю.
|
#6
|
||||
|
||||
Думал что-то сложное, но вы, как всегда проделали основную работу самостоятельно и обошлось всё вроде малой кровью, вот с небольшими добавками ваш обработчик жима восьмой кнопки
Код:
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... Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 19.04.2018 в 22:27. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
LIONSMILE (20.04.2018)
|