Главная страница
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.037 c
6-1149542592
CShooter
2006-06-06 01:23
2006.10.29
NMpop31.GetMailMessage(NMpop31.MailCount) выдает ERangeError


6-1150044361
Morpheuz
2006-06-11 20:46
2006.10.29
Как можно использовать TClientSocket и TServerSocket на Delphi 7?


2-1160982536
mva
2006-10-16 11:08
2006.10.29
Языковая панель


11-1133217453
thaddy
2005-11-29 01:37
2006.10.29
wiki.


3-1157362217
alexvan
2006-09-04 13:30
2006.10.29
Вопрос по BLOB