Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1160474069
Vlad Oshin
2006-10-10 13:54
2006.10.29
Про отца. Мини-рассказ


2-1160983689
DJoker
2006-10-16 11:28
2006.10.29
Сортировка таблицы


6-1149575747
Vavilon
2006-06-06 10:35
2006.10.29
Написание плагина для Internet Explorera


15-1160071125
Иксик
2006-10-05 21:58
2006.10.29
Справочники имен


15-1160029772
DiamondShark
2006-10-05 10:29
2006.10.29
Международный день работников образования





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский