Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Пустой TXMLDocument или, как создать корневой узел?   Найти похожие ветки 

 
mfender ©   (2006-10-10 10:33) [0]

Здравия желаю!

Ситуация такая: создаётся XML-документ. Всё хорошо, если файл существует и в нём есть верхний узел. А вот если файла нет, что делать?

Пишу такую конструкцию:
 
 if FXMLDoc.IsEmptyDoc then
 begin
   FXMLDoc.Active := True;
   try
     FXMLDoc.Version := LogXMLVersion;
     FXMLDoc.Encoding := LogXMLEncoding;
   except
   end;
   FROOT := FXMLDoc.AddChild(LogRoot);
 end;


В этом случае сразу при Active := True происходит ошибка EDOMParseError, что и понятно - файла вообще нет, XML тоже.

Если пишу

 if FXMLDoc.IsEmptyDoc then
 begin
   FROOT := FXMLDoc.AddChild(LogRoot);
   FXMLDoc.Active := True;
   try
     FXMLDoc.Version := LogXMLVersion;
     FXMLDoc.Encoding := LogXMLEncoding;
   except
   end;
 end;

Получаю EXMLDocError с сообщением "No active document", что тоже понятно - создать ноду в неактивном документе не получается.

Просто заколдованный круг. Как с этим можно попбороться?


 
Плохиш ©   (2006-10-10 10:49) [1]


function TDM.CreateNewXMLDocument(ARootNodeName: String): IXMLNode;
begin
 XMLDocAnswer.Active := false;
 XMLDocAnswer.XML.Clear;
 XMLDocAnswer.Active := true;
 XMLDocAnswer.Version := xmlVersion;
 XMLDocAnswer.Encoding := xmlEncoding;
 XMLDocAnswer.AddChild(ARootNodeName);
 Result := XMLDocAnswer.DocumentElement;
end;


 
mfender ©   (2006-10-10 12:21) [2]

Вобщем, решил эту порчу таким вот способом:


procedure TmfXMLLogMemo.SetLogFile(const Value: string);
begin
 FLogFile := Value;
 if FileExists(FLogFile) then
 begin
   try
     FXMLDoc.LoadFromXML(FLogFile);
     FROOT := FXMLDoc.ChildNodes.FindNode(FXMLDocRoot);
   except
     on EDOMParseError do
     begin
       DocumentCreate;
       Save;
     end;
   end;
 end
 else
   DocumentCreate;
end;

procedure TmfXMLLogMemo.DocumentCreate;
begin
 FXMLDoc.Active := False;
 FXMLDoc.XML.Clear;
 FXMLDoc.Active := True;
 FXMLDoc.Version := LogXMLVersion;
 FXMLDoc.Encoding := LogXMLEncoding;
 FROOT := FXMLDoc.AddChild(LogRoot);
end;


 
mfender ©   (2006-10-10 12:51) [3]

Но осталась проблема: если файл есть, но он пустой, опять появляется EDOMParseError. Записал её в ToDo...



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.049 c
2-1160996805
Zancik
2006-10-16 15:06
2006.10.29
Меняем цвет ФОРМЫ


15-1160481444
Petr V. Abramov
2006-10-10 15:57
2006.10.29
Oracle Developer vs Delphi


15-1160216600
Terb
2006-10-07 14:23
2006.10.29
Проблема с подключением к инету, через dialup


2-1160503113
Volodya_
2006-10-10 21:58
2006.10.29
Delphi - Excel


15-1159957324
Layner
2006-10-04 14:22
2006.10.29
Господа москвичи! Подскажите самый крупный IT универсам в столице