Главная страница
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.056 c
2-1160904568
pathfinder
2006-10-15 13:29
2006.10.29
Переопределение методов..


3-1157462650
_Le_
2006-09-05 17:24
2006.10.29
BDS 2006, QReport


15-1160049524
kroner
2006-10-05 15:58
2006.10.29
HTML-редактор


2-1160806111
gidd
2006-10-14 10:08
2006.10.29
TPopupMenu


15-1160059562
zdm
2006-10-05 18:46
2006.10.29
FastReport BDS 2006