powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамическое создание компонента TXMLDocument
6 сообщений из 6, страница 1 из 1
Динамическое создание компонента TXMLDocument
    #39917383
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All,

Delphi 10.3.3

Если кинуть на форму компонент TXMLDocument и в коде, скажем при нажатии кнопки, прописать обработчик
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
 iRootNode :IXMLNode;

begin
 XMLDocument1.Active := False;
 XMLDocument1.XML.Text := <мой XML>;
 XMLDocument1.Active := True;
 iRootNode := XMLDocument1.DocumentElement;
end;

то вызов XMLDocument1.DocumentElement срабатывает нормально, и я получаю корневую ноду.

А если в этой же форме на другую кнопку прописать динамическое создание TXMLDocument
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
 iRootNode :IXMLNode;
 oXMLDocument :TXMLDocument;

begin
 oXMLDocument := TXMLDocument.Create(nil);
 oXMLDocument.DOMVendor := GetDOMVendor('MSXML');
 oXMLDocument.Active := False;
 oXMLDocument.XML.Text := <мой XML>;
 oXMLDocument.Active := True;
 iRootNode := oXMLDocument.DocumentElement;
end;

То во время обращения к oXMLDocument.DocumentElement я получаю ошибку
"Invalid pointer operation".

Не могу понять, что я делаю не правильно.
...
Рейтинг: 0 / 0
Динамическое создание компонента TXMLDocument
    #39917389
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых,
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
var
 iRootNode :IXMLNode;
 oXMLDocument :IXMLDocument;

begin
 oXMLDocument := TXMLDocument.Create(nil);
 oXMLDocument.DOMVendor := GetDOMVendor('MSXML');
 oXMLDocument.Active := False;
 oXMLDocument.XML.Text := <мой XML>;
 oXMLDocument.Active := True;
 iRootNode := oXMLDocument.DocumentElement;
end;
...
Рейтинг: 0 / 0
Динамическое создание компонента TXMLDocument
    #39917414
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Квейд,

Да, так работает, Большое спасибо .

Хотя и не совсем понятно. Ведь когда кидаешь компонент на форму, он в объявлении пишется
как XMLDocument1: TXMLDocument; т.е. как класс, а не как интерфейс.

Хотя даже в моем коде, если заменить
oXMLDocument := TXMLDocument.Create(nil)
на
oXMLDocument := TXMLDocument.Create(Self)
то тоже ошибки не будет.

Квейд
во-первых,

В моем коде еще где то ошибка ?
...
Рейтинг: 0 / 0
Динамическое создание компонента TXMLDocument
    #39917433
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Квейд
во-первых,
Код: pascal
1.
2.
var
 oXMLDocument :IXMLDocument;

А как В этом случае освобождать память от oXMLDocument ? Или теперь это не надо ?
...
Рейтинг: 0 / 0
Динамическое создание компонента TXMLDocument
    #39917435
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не объект чтоб
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Динамическое создание компонента TXMLDocument
    #39917446
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stalker4
Квейд,

Да, так работает, Большое спасибо .

Хотя и не совсем понятно. Ведь когда кидаешь компонент на форму, он в объявлении пишется
как XMLDocument1: TXMLDocument; т.е. как класс, а не как интерфейс.
...

Это, кстати, документировано (хотя я когда-то кажется тоже нарвался на вот такое же, как вы).
ЭмбаркадероWhen TXMLDocument is created without an Owner, it behaves like an interfaced object. That is, when all references to its interface are released, the TXMLDocument instance is automatically freed. When TXMLDocument is created with an Owner, however, it behaves like any other component, and is freed by its Owner. When you add a TXMLDocument component from the component palette to a form or data module, it is automatically created with an Owner. When the TXMLDocument component is created using the global LoadXMLDocument function (or by a function that the XML Data Binding wizard generates to return the root node of the document), the function creates a TXMLDocument instance without an Owner.
http://docwiki.embarcadero.com/Libraries/XE3/en/Xml.XMLDoc.TXMLDocument
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Динамическое создание компонента TXMLDocument
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]