Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.033 c
1-1158758605
DVM
2006-09-20 17:23
2006.10.29
Убрать символ & при считывании Caption MenuItema?


15-1159526178
Ne-Lud
2006-09-29 14:36
2006.10.29
Что важнее?


15-1160119326
Loginov Dmitry
2006-10-06 11:22
2006.10.29
Задачка (почти пятничная :)


2-1160648808
0_archi_0
2006-10-12 14:26
2006.10.29
Не работает код (БД, репликация). Приложение не закрывается


2-1160651497
Kolan
2006-10-12 15:11
2006.10.29
Как прочетать весь файл использую TFileStream




   Наверх