Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2013, 19:34   #1
ВанекПВМ
 
Регистрация: 05.09.2012
Сообщений: 3
Печаль Парсинг XML с использованием TXMLDocument

Здравствуйте!
Проблема возникает при использовании XmlDocument. Т.е. при его программном создании. Все время вылетает на одном месте.

Код:

    Function TMyXml.Load1(Param_XmlMessage:WideString; Form_l : TForm):Boolean;

    var
    root: IXMLNode;
    str : AnsiString;
    MyXMLDoc : IXMLDocument;
    Flag : Boolean;
    begin
       if (length(Param_XmlMessage)>11) then
      begin
        Flag:=false;
      end
       else
        exit;
        if not flag then
          begin
          Flag := true;
      SetLength(FParams,0);
      str := AnsiString(Param_XmlMessage);
      try
        MyXMLDoc := nil;
        MyXMLDoc := TXMLDocument.Create(Application);
        try
            MyXMLDoc.Active:=false;
            with MyXMLDoc do
            begin
//              Version := '1.0';
//              Encoding := 'utf-8';
//              StandAlone:='yes';
//              DocumentElement:=AddChild('MSG');
              LoadFromXML(str);
            end;

//          MyXMLDoc.Options := [doNodeAutoCreate,doAttrNull,doAutoPrefix,doNamespaceDecl];
          TXMLDocument(MyXMLDoc).DOMVendor := GetDomVEndor('MSXML');
          MyXMLDoc.Active:=true;
        except
          raise EAccessViolation.Create('Ошибка!');
          MyXMLDoc.Active := false;
        end;
        MyXMLDoc.DocumentElement := MyXMLDoc.AddChild('MSG');
        // Определение корневого элемента
        try
          Root := MyXMLDoc.DocumentElement;
        except
          on e:exception do
          raise Exception.Create(e.Message);
        end;

        // Загрузка уровня
        LoadLevel(Root.ChildNodes);
      finally
        MyXMLDoc.Active := false;
        TXMLDocument(MyXMLDoc).Free;
      end;
          end;
    end;
Сразу, оговорюсь, TMyXml - отдельно созданный объект.

Последний раз редактировалось ВанекПВМ; 05.02.2013 в 10:15. Причина: Чуть-чуть изменил код
ВанекПВМ вне форума Ответить с цитированием
Старый 04.02.2013, 19:53   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А сделать MyXMLDoc: TXMLDocument; вместо MyXMLDoc : IXMLDocument;
и не забывать MyXMLDoc.Free
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.02.2013, 10:17   #3
ВанекПВМ
 
Регистрация: 05.09.2012
Сообщений: 3
По умолчанию

Пробовал использовать и TXMLDocument, и MyXMLDoc.Free ставил - не помогает.
Сейчас код выложил - он не вылетает, только Root.ChildNodes не возвращает потомков(возвращает 0).
ВанекПВМ вне форума Ответить с цитированием
Старый 05.02.2013, 10:54   #4
ВанекПВМ
 
Регистрация: 05.09.2012
Сообщений: 3
По умолчанию

Все, я разобрался. Дело в том, что TXMLDocument. Create нужен существующий родитель, т.е. надо создать что-то типа
Код:
        
FObj := TComponent. Create (nil);
        MyXMLDoc := nil;
        MyXMLDoc := TXMLDocument.Create(FObj);
Так будет работать.
Тема закрыта.

Последний раз редактировалось ВанекПВМ; 05.02.2013 в 10:57.
ВанекПВМ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг xml C# Dominatorsha Помощь студентам 5 19.02.2013 14:53
xml парсинг Letnab Работа с сетью в Delphi 0 07.01.2012 12:56
Парсинг XML Aleskandr PHP 1 24.08.2011 14:32
Парсинг XML. Abuhamed PHP 1 01.06.2011 22:24
Парсинг XML [Smarik] Общие вопросы Delphi 6 13.03.2010 17:38