|
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 3
|
|
Программа редактирования XML - документа10.04.2012, 12:54. Показов 25688. Ответов 21
Метки delphi, ixmlnode, parse, tree, ttreeview, txmldocument, xml, xml dom, xml node, xml документ, xml узел, обрабтка xml, построение дерева, редактирование xml, редактор xml (Все метки)
Необходимо написать программу на delphi, позволяющую редактировать дерево xml-документа
Буду очень благодарна за вашу помощь!
0
|
|
| 10.04.2012, 12:54 | |
|
Ответы с готовыми решениями:
21
Программа редактирования XML документа Обработка XML документа с использованием MSXML Добавить на форме редактирования отдельную кнопку для редактирования должностей |
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 10.04.2012, 15:28 | |
|
Могу предложить строить программу на двух компонентах - TXMLDocument (закладка Internet в палитре компонентов) и TTreeView (закладка Win32). С помощью компонента TXMLDocument читать/изменять XML документ, а с помощью TTreeView показывать древовидную структуру документа.
0
|
|
|
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 3
|
|
| 10.04.2012, 15:44 [ТС] | |
|
А вы можете написать код? а то так сразу сходу непонятно
0
|
|
|
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 3
|
|
| 10.04.2012, 19:00 [ТС] | |
|
Вот файл:
работа xml.docx
0
|
|
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||||||||||||||||||
| 11.04.2012, 02:17 | ||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
О проекте.
На форме имеем: 1. TXMLDocument - для работы с DOM моделью XML документа. 2. TTreeView - для графического представления XML документа в виде дерева узлов. 3. TStringGrid - для показа атрибутов XML узла. 4. TOpenDialog - для выбора файла. 5. TButton - для запуска диалога открытия файла. Я сейчас реализовал следующее. XML документ загружаем в TXMLDocument. Затем, рекурсивно обходим все узлы XML документа и для каждого такого узла создаём соответствующий узел в дереве TTreeView. К каждому узлу TTreeView прикрепляем ссылку на интерфейс соответствующего XML узла. Для TTreeView определяем обработчик события OnChange. - Это событие происходит в момент, когда произошёл выбор нового узла в дереве. В этом обработчике из данных узла дерева извлекаем ссылку на интерфейс соответствующего XML узла и в TStringGrid показываем сведения о всех атрибутах этого XML узла. Здесь реализованы основные механизмы по загрузке данных, построению дерева, по связыванию и освобождению данных. Во время работы, через любой узел дерева мы имеем доступ к интерфейсу соответствующего XML узла.
--- Софья222, эту программу можешь взять, в качестве основы. Сначала попытайся разобраться в коде этого проекта. А затем, следующим этапом, тебе нужно будет добавить в проект действия по редактированию XML данных. Основа для этого создана - узлы дерева содержат ссылки на интерфейсы соответствюущих XML узлов. Через эти интерфейсы можно изменять/добавлять/удалять параметры и сами XML узлы. Заменить:
Или заменить на:
5
|
||||||||||||||||||||||
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 11.04.2012, 15:45 | ||||||
Сообщение было отмечено как решение
Решение
Добавил редактирование атрибутов и сохранение XML документа в файл.
1. Удаление/добавление атрибутов. 2. Удаление/добавление узлов. 3. Перенос атрибутов и узлов на другие позиции в дереве.
6
|
||||||
|
5 / 5 / 0
Регистрация: 14.10.2010
Сообщений: 210
|
|
| 26.10.2012, 06:55 | |
|
хм... неплохо
Но вы не освобождаете память после загрузки xml-файла. А если они будут под 100 Мб, печально будет
1
|
|
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 26.10.2012, 08:52 | ||||||
|
Память в коде освобождается - перед загрузкой нового XML документа и перед уничтожением формы.
Освобождение памяти выполняют две процедуры: ClearTreeView() и ClearStringGrid() - их определения идут самими первыми в разделе Implementation. Перед загрузкой нового XML документа - строки 131, 132. И перед уничтожением формы - строки 252, 253. Добавлено через 9 минут А вот всё-таки в одном месте есть утечка. - При выборе другого узла в дереве, таблица атрибутов очищается без освобождения... Туда тоже надо добавить вызов ClearStringGrid(). С учётом этого, исправленный метод TForm1.TreeView1Change() будет выглядеть так:
1
|
||||||
|
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 3
|
|
| 20.01.2014, 17:33 | |
|
Ув. Mawrat!
Спасибо за столь подробный код. Есть у меня вопрос. Мы смотрим атрибуты XML узла по событию Change TTreeView. Как можно увидеть атрибуты XML узла не по событию, а указывая номер элемента TTreeView?
0
|
|
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||||||
| 20.01.2014, 18:48 | |||||||
2
|
|||||||
|
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 3
|
||||||
| 21.01.2014, 12:13 | ||||||
|
Спасибо за пример - с ним разобрался.
Только вот столкнулся с проблемой. В функции AttrByIndexNode я сделал небольшие дополнения. И после добавления строчки if (tmp='name') then LPtemplate:=AttrNode.NodeValue; срабатывает исключение (строчка 67 в коде ниже): Could not convert variant of type (Null) into type (String); Буду благодарен за помощь, вот вся функция:
0
|
||||||
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||||||||
| 21.01.2014, 15:34 | ||||||||||||
- Атрибут с именем "name" не найден -> LPTemplate = '---' - AttrNode.NodeValue = Null -> LPTemplate = '' - Во всех других случаях -> LPTemplate = AttrNode.NodeValue В этом случае код будет таким:
2
|
||||||||||||
|
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 3
|
||||||
| 22.01.2014, 19:16 | ||||||
|
Еще раз спасибо - разобрался.
Появился надеюсь последний вопрос - удаление. Удалить с treeview я знаю как:
0
|
||||||
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||||||
| 23.01.2014, 19:13 | ||||||
|
Удаление будет из нескольких этапов состоять. У нас устройство такое. К каждому узлу TreeView через поле TTreeNode.Data привязан контейнер, который хранит ссылку на интерфейс XML узла. Поэтому нам надо удалить узел TreeView, освободить память, занятую под контейнер и затем удалить сам XML узел.
Вот, как это можно сделать:
5
|
||||||
|
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 67
|
|
| 18.07.2015, 08:07 | |
|
Интересно и хорошо сделано как пример в дальнейшем программировании.
. Можно ли у видеть окончательную версию продукта ? В виде исходников и архива ? .
0
|
|
|
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 67
|
|
| 19.07.2015, 17:40 | |
|
Есть некий XML файл.
Файл XML нормальный, но последней строкой или несколькими строками содержит электронную подпись. . Использую стандартный компонент TXMLDocument . . var XML : TXMLDocument . Упрощенный код. . XML:=TXMLDocument.Create(self); XML.LoadFromFile('Имя файла'); . Как сделать так, чтобы при загрузки файла XML не выдавалась следующая ошибка: Т.е. игнорировать ошибку ? .
0
|
|
|
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 67
|
||||||
| 22.07.2015, 20:49 | ||||||
|
Ну как то так...
.
0
|
||||||
|
1 / 1 / 0
Регистрация: 12.06.2015
Сообщений: 67
|
||||||
| 22.07.2015, 20:54 | ||||||
|
Есть вопрос по вот такому коду.
.
Ругается на строчку XMLNode:=XML.DocumentElement; EAccessViolation: Access violation at address 004E5F40 in module 'Project2_XML.exe'. Read of address 00000049 . Ну никак я не пойму отчего и почему ??? .
0
|
||||||
|
70 / 14 / 4
Регистрация: 10.07.2018
Сообщений: 314
|
||
| 02.10.2018, 20:14 | ||
|
0
|
||
| 02.10.2018, 20:41 | |
|
0
|
|
| 02.10.2018, 20:41 | |
|
Помогаю со студенческими работами здесь
20
Вытащить данные из xml документа Ошибка в создании xml документа Взять данные с XML документа
Загрузка данных из XML документа. В RadioButton.Caption не отображается значение! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|