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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 01.01.2016, 13:42   #1
MotoArhangel
Форумчанин
 
Регистрация: 25.02.2011
Сообщений: 51
Репутация: 10
По умолчанию 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 в 14:26.
MotoArhangel вне форума   Ответить с цитированием
Старый 01.01.2016, 14:19   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,873
Репутация: 6688
По умолчанию

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

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

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

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

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

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

Уже и так пробовал.
Код:
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, 14:47   #7
come-on
Профессионал
 
Регистрация: 21.10.2015
Сообщений: 1,414
Репутация: 414
По умолчанию

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


22:41.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.