Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 01.01.2016, 12:42   #1
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию XMLDocument помогите решить проблему.

Код:
procedure TMain.GeLastMSG;
var
  response:string;
  XMLDocument: IXMLDocument;
  InfoNode: IXMLNode;
begin
  //проверяю доступность 
  if HTTPGet('http://vk.com/' + ReadIni('Domain')) = 'error' then
    exit;
  //записываю полученный кусок xml
  response := HTTPGet('http://api.vk.com/method/wall.get.xml?v=5.42&' +
    'filter=owner&' + 'domain=' + ReadIni('Domain') + '&' + 'count='
     +ReadIni('CountMSG')+'&'
    + 'extended=1&' // +
    // 'access_token=' + access_token
    );
  //Создаю XMLDocument
  XMLDocument:= TXMLDocument.Create(nil);
  //XMLDocument активный
  XMLDocument.Active := true;
  //Помещаю в XMLDocument полученный данные
  XMLDocument.LoadFromXML(response);
  //ищу ветку и беру из нее номер сообщения
  InfoNode := XMLDocument.DocumentElement.ChildNodes.FindNode('items');
  if Assigned(InfoNode) then
      begin
        //если номер предыдущего и нового не совпадает
        if (VarToStr(InfoNode.ChildNodes[0].ChildValues['id']) <>
          ReadIni('LastMSG')) then
        begin
          //вывожу сообщение в трей
          ShowMSGTray('Есть обновление',
            TextReduction(VarToStr(InfoNode.ChildNodes[0].ChildValues
            ['text'])));
          WriteIni(VarToStr(InfoNode.ChildNodes[0].ChildValues['id']));
        end;
      end;

  XMLDocument.Active := false;
  InfoNode:=nil;
  XMLDocument := nil;
end;
Где что не очистил? Убегает память.

И на всякий случай:
Код:
function TMain.HTTPGet(getstr: string): string;
var
  temp: string;
  http    : TIdHTTP;
begin
  result := '';

   http := TIdHTTP.Create(nil);
   try 
    try
      result := HTTP.Get(getstr);
    except
      on E: EIdSocketError do
      begin
       .....
      end;

      on E: EIdHTTPProtocolException do
      begin
        .......
      end;
    end;
  finally
    http.Free;
  end;
end;

Последний раз редактировалось MotoArhangel; 01.01.2016 в 13:26.
MotoArhangel вне форума Ответить с цитированием
Старый 01.01.2016, 13:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Это у какого делфина Free нет у XMLDocument? Должен быть. InfoNode:=nil не нужно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.01.2016, 13:23   #3
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,413
По умолчанию

Аватар
там XMLDocument: IXMLDocument;

а как автор пишет и воопросы задает такие .. ?
come-on вне форума Ответить с цитированием
Старый 01.01.2016, 13:38   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Дык пусть правильно опишет. А то в уме одно, а делает другое
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.01.2016, 13:42   #5
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Это у какого делфина Free нет у XMLDocument? Должен быть. InfoNode:=nil не нужно
у XMLDocument: IXMLDocument; нет free,
А вот у XMLDocument: TXMLDocument; все как нужно.
Но решил сделать как в мануале.
http://docwiki.embarcadero.com/CodeE..._case_(Delphi)

Последний раз редактировалось MotoArhangel; 01.01.2016 в 13:44.
MotoArhangel вне форума Ответить с цитированием
Старый 01.01.2016, 13:46   #6
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

Уже и так пробовал.
Код:
var
  response:string;
  XMLDocument: tXMLDocument;
  InfoNode: IXMLNode;
begin
   if HTTPGet('http://vk.com/' + ReadIni('Domain')) = 'error' then
    exit;

  response := HTTPGet('http://api.vk.com/method/wall.get.xml?v=5.42&' +
    'filter=owner&' + 'domain=' + ReadIni('Domain') + '&' + 'count='
     +ReadIni('CountMSG')+'&'
    + 'extended=1&' // +
    // 'access_token=' + access_token
    );
  XMLDocument:= TXMLDocument.Create(application);
   try
  XMLDocument.XML.Text:=response;
  XMLDocument.Active := true;
  InfoNode := XMLDocument.DocumentElement.ChildNodes.FindNode('items');
  if Assigned(InfoNode) then
      begin
        if (VarToStr(InfoNode.ChildNodes[0].ChildValues['id']) <>
          ReadIni('LastMSG')) then
        begin
          ShowMSGTray('Есть обновление',
            TextReduction(VarToStr(InfoNode.ChildNodes[0].ChildValues
            ['text'])));
          WriteIni(VarToStr(InfoNode.ChildNodes[0].ChildValues['id']));
        end;
      end;

  XMLDocument.Active := false;
  //InfoNode:=nil;
  //XMLDocument := nil;
   finally
     XMLDocument.Free;
   end;
end;
Все равно утечка.
MotoArhangel вне форума Ответить с цитированием
Старый 01.01.2016, 13:47   #7
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,413
По умолчанию

Код:
  if HTTPGet('http://vk.com/' + ReadIni('Domain')) = 'error' then
    exit;
вот это можно сразу выкинуть, ничего оно не делает полезного, только захламляет

скиньте xml в файл и поднимайте из файла, поймете где течет

Последний раз редактировалось come-on; 01.01.2016 в 13:49.
come-on вне форума Ответить с цитированием
Старый 01.01.2016, 14:36   #8
MotoArhangel
Пользователь
 
Регистрация: 25.02.2011
Сообщений: 51
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Код:
  if HTTPGet('http://vk.com/' + ReadIni('Domain')) = 'error' then
    exit;
вот это можно сразу выкинуть, ничего оно не делает полезного, только захламляет

скиньте xml в файл и поднимайте из файла, поймете где течет
Вопрос снят. Не внимателен
MotoArhangel вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить проблему. Nikromantik Общие вопросы C/C++ 9 12.02.2014 21:39
Помогите решить проблему? Serik410 JavaScript, Ajax 4 19.12.2013 17:29
ПОМОГИТЕ РЕШИТЬ ПРОБЛЕМУ !!!!!!!!!!!! ЛиЛу Помощь студентам 5 29.12.2008 15:36
Помогите решить проблему nismo Microsoft Office Excel 7 12.09.2008 07:59
помогите решить проблему ... alexey7 Microsoft Office Excel 2 16.10.2007 12:25


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840