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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 13:02   #1
avd
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 79
По умолчанию Парсинг XML (попытки разобраться)

Какой гад придумал XML? Замучился уже - при третьем нажатии на кнопку
возникает исключение. Первые два нажатия нормально.
Если кидаю файл на http сервер всё нормально.

Код:
// =======================================================
function GetAtr(RefToFile: string): string;
var
  XMLDocument1: TXMLDocument;
begin
  try
    XMLDocument1 := TXMLDocument.Create(RefToFile);
    XMLDocument1.DOMVendor := GetDOMVendor('MSXML');
    XMLDocument1.LoadFromFile(RefToFile);
    XMLDocument1.Active := true;
    Result := XMLDocument1.DocumentElement.Attributes['Atr'];
    XMLDocument1.Active := false;
  except
    Result := '0';
  end;
end;

// =======================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form1.Label1.Caption := GetAtr('C:\Documents and ...\obana.xml');
end;
avd вне форума Ответить с цитированием
Старый 24.02.2012, 13:38   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: Ты создал XMLDocument1 А почему не освобождаешь?
Во-вторых: На какой строке исключение?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2012, 14:50   #3
avd
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 79
По умолчанию

Извиняюсь, исключение в строке
Код:
XMLDocument1.LoadFromFile(RefToFile);
Если пытаться освободить
Код:
function GetAtr(RefToFile: string): string;
var
  XMLDocument1: TXMLDocument;
begin
  try
    XMLDocument1 := TXMLDocument.Create(RefToFile);
    XMLDocument1.DOMVendor := GetDOMVendor('MSXML');
    XMLDocument1.LoadFromFile(RefToFile);
    XMLDocument1.Active := true;
    Result := XMLDocument1.DocumentElement.Attributes['Atr'];
    XMLDocument1.Active := false;
    XMLDocument1.Free;
  except
    Result := '0';
  end;
end;
исключение сразу на строке XMLDocument1.Free;
avd вне форума Ответить с цитированием
Старый 24.02.2012, 17:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Извиняюсь, исключение в строке
А что за текст ошибки? Покажи скрин. Уверен что во всем виноват XML провайдер от Микрососов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2012, 17:26   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
XMLDocument1.DOMVendor := GetDOMVendor('MSXML');
Зачем эта строка? По умолчанию XMLDocument и так создается с нужным DOMVendor, именно тем, который вы пытаетесь запихнуть в него. И в справке дельфей почитайте как можно использовать объект, возвращаемый GetDOMVendor
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 17:40   #6
avd
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 79
По умолчанию

Ещё не лучше!!!
Если xml файл лежит на диске в корне или путь короткий - всё нормально! Если в папке мои документы - Access violation at address 00000000. Read of address 00000000.

Соврал. Если так C:\Users\Aleksandr\Documents\Obana. xml - работает

Если так C:\Users\Aleksandr\Documents\RAD Studio\Projects\Obana.xml
третье нажатие на кнопку и привет.

Последний раз редактировалось Stilet; 24.02.2012 в 19:43.
avd вне форума Ответить с цитированием
Старый 24.02.2012, 17:47   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Создание еще по-другому сделайте, например
Цитата:
XMLDocument1 := TXMLDocument.Create(Application);
и уберите XMLDocument1.Active := true; после LoadFromFile, там и так уже Active=True, если удачно загрузилось
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.02.2012, 17:49   #8
avd
Пользователь
 
Регистрация: 06.06.2010
Сообщений: 79
По умолчанию

Аватар спасибо!

XMLDocument1 := TXMLDocument.Create(Application); помогло!!

Как это объяснить ???

P.S. XMLDocument1.DOMVendor := GetDOMVendor('MSXML'); не влияет

Последний раз редактировалось avd; 24.02.2012 в 17:53.
avd вне форума Ответить с цитированием
Старый 24.02.2012, 17:51   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Как это объяснить
Фиг его знает. Нужно залазить в дебри, а нет ни какого желания
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг XML в Delphi admroot Общие вопросы Delphi 6 04.02.2012 20:24
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