Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизПустой 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.044 c