TXMLDocument
От: katerina  
Дата: 22.08.03 12:41
Оценка:
Привет всем!

Имеется класс который должен получать XML файл и выбирать из него инфу
Делаю так:
XMLDoc := TXMLDocument.Create(FileName);
XMLDoc.Active := true;
XMLDoc.DocumentElement; // возникает AV
XMLDoc.ChildNodes;      //возникает AV


Причем строка
XMLDoc.XML.Text

содержит что надо и не вылетает
В чем может быть причина и как бороться?
Re: TXMLDocument
От: kavlad Россия http://www.wavesoft.ru
Дата: 22.08.03 13:38
Оценка: 11 (4)
Здравствуйте, katerina, Вы писали:

K>Имеется класс который должен получать XML файл и выбирать из него инфу

K>Делаю так:
K>
K>XMLDoc := TXMLDocument.Create(FileName);
K>XMLDoc.Active := true;
K>XMLDoc.DocumentElement; // возникает AV
K>XMLDoc.ChildNodes;      //возникает AV
K>


K>В чем может быть причина и как бороться?


Гнилой этот конструктор
constructor TXMLDocument.Create(const AFileName: DOMString);


Сделай вот так:
  XMLDoc := TXMLDocument.Create(Application);
  XMLDOc.LoadFromFile(FileName);
  XMLDoc.Active := true;
  XMLDoc.DocumentElement; // не возникает AV
  XMLDoc.ChildNodes;      // не возникает AV
Калабухов А.В.
Re[2]: TXMLDocument
От: katerina  
Дата: 22.08.03 15:14
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Сделай вот так:

K>
K>  XMLDoc := TXMLDocument.Create(Application);
K>  XMLDOc.LoadFromFile(FileName);
K>  XMLDoc.Active := true;
K>  XMLDoc.DocumentElement; // не возникает AV
K>  XMLDoc.ChildNodes;      // не возникает AV
K>


Огромное спасибо! Заработало!
Re: TXMLDocument
От: kavlad Россия http://www.wavesoft.ru
Дата: 25.08.03 13:05
Оценка: 6 (1)
Кстати об этом баге/фиче говорилось на http://bdn.borland.com здесь.
Глюк связон с подсчетом ссылок в интерфейсах.
При вызове
TXMLDocument.Create(nil);

(а именно он и вызывается при TXMLDocument.Create(FileName); ) счетчик ссылок на интерфейс документа обнуляется, вот и возникает АВ.
Бороться как описано по ссылке:
var
  Doc: IXMLDocument;
begin
  Doc := TXMLDocument.Create(nil);
end;

Еще TXMLDocument любит вызов CoInitialize. Поэтому в приложение приходится вставлять Application.Initialize
Калабухов А.В.
Re[2]: TXMLDocument
От: Аноним  
Дата: 17.12.03 14:03
Оценка:
Здравствуйте, kavlad, Вы писали:

K>Кстати об этом баге/фиче говорилось на http://bdn.borland.com здесь.

K>Глюк связон с подсчетом ссылок в интерфейсах.
K>При вызове
K>
K>TXMLDocument.Create(nil);
K>

K>(а именно он и вызывается при TXMLDocument.Create(FileName); ) счетчик ссылок на интерфейс документа обнуляется, вот и возникает АВ.
K>Бороться как описано по ссылке:
K>
K>var
K>  Doc: IXMLDocument;
K>begin
K>  Doc := TXMLDocument.Create(nil);
K>end;
K>

K>Еще TXMLDocument любит вызов CoInitialize. Поэтому в приложение приходится вставлять Application.Initialize



Спасибо, помагло
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.