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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2009, 20:01   #1
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию Работа с Xml в Delphi

Задача состоит в том чтобы составить программу на делфи, в котором с xml файла вытащит значения и выполнив над ними простые арифметические операции вывести результат в другом файле) С делфи только начал знакомится! Посоветуйте с чего начать и что вообще делать?
bestlover вне форума Ответить с цитированием
Старый 03.09.2009, 23:28   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Инструкция для Delphi 7.

Скачиваем простой XML парсер http://www.eonclash.com/ECXML_Parser/ECXML_Parser.zip
Создаем каталог "ECXMLParser", там где находится Delphi (или любой другой, по вкусу).
Распаковываем в этот каталог скачанный архив.

Запускаем Delphi.
Закрываем загруженный проект File->Close All.
Вызываем команду Open (File->Open...).
Из нашего каталога выуживаем файл ECXMLParserD70.dpk
Нажимаем на кнопку Compile. После компиляции нажимаем кнопку Install.

В палитре компонентов должна появиться закладка с надписью "EC Test", где находятся два компонента.
Закрываем проект ECXMLParserD70. На запрос "записать/не записать" отвечаем: "ни за что".

Создаем новый проект. На его форму кидаем TButton, TMemo и из новой закладки компонент TECXMLParser.
У компонента TECXMLParser свойство Name меняем на XML (для того чтобы была совместимость с приведенным ниже кодом), хотя такое и не обязательно, тогда в процедуре надо будет поменять XML на свое имя.
К событию OnClick кнопки привязываем процедуру, где пишем такой текст:

Код:
procedure TForm1.Button2Click(Sender: TObject);

  procedure DrawXMLItem(XMLItem: TXMLItem);
  var
    I : Integer;
  begin
    Memo1.Lines.Add(XMLItem.Name+' : '+XMLItem.Text);
    for i := 0 to XMLItem.SubItemCount-1 do
      DrawXMLItem(XMLItem.SubItems[i]);
  end;

begin
  XML.LoadFromFile('E:\file.xml'); //любой xml файл, для тестирования можно и здесь указать
  Memo1.Lines.BeginUpdate;
  DrawXMLItem(XML.Root);
  Memo1.Lines.EndUpdate;
end;
В результате работы этой процедуры в Memo должны появиться строки вида: <наименование> : <значение>.
Текст представляемый свойством XMLItem.Text - и есть требуемые значения.

Это и будет первое упражнение по работе с файлами XML формата.
Для первых экспериментов не советую брать штатый дельфийский XML разборщик - сложновато будет и глюкавый он, на самом деле.

Дальше развивать проект автору предоставляется самостоятельно. Разжевывать программы до молекул в благородных собраниях не принято, хотя и не возбраняется и, если будут проблемы с проектом, тутошний народ с охотой пояснит все что требуется и совсем не обязательно по приведенной инструкции, путей разных - море.
Скандербег вне форума Ответить с цитированием
Старый 07.09.2009, 16:46   #3
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Уважаемый Скандерберг ! Все сделал по инструкции, но у меня ен вышел компонент с названием ЕС Test!!!и следовательно не могу продолжить дальше.... Может есть другие парсеры или способы посоветуйте пожалуйста) Очень надо!
bestlover вне форума Ответить с цитированием
Старый 07.09.2009, 17:14   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Почитай, посмотри :вот тут.
Или вот тут.
И вот.

Вдруг поможет ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 07.09.2009, 18:07   #5
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Сообщение от bestlover Посмотреть сообщение
Уважаемый Скандерберг ! Все сделал по инструкции, но у меня ен вышел компонент с названием ЕС Test!!! Очень надо!
Дело тут, по всей видимости, в терминологии. Нет такого компонента "ES Test" - есть с таким названием закладка на палитре компонентов. Закладку с этим именем и надо искать в Delphi. Наверняка, если все сделано правильно, такая закладка есть, только ее поискать надо среди всех прочих.
Скандербег вне форума Ответить с цитированием
Старый 07.09.2009, 18:23   #6
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Скандерберг, я посмотрел как ни странно но не появилась закладка) Может у меня делфи глюченный? Вы сами не сталкивались с такой задачей насчет xml ? Ссылки посмотрел которые оставил Kotofff , пробовал с исходниками повозится ошибка на ошибке выходит! Если бы кто нибудь написал инструкцию полную я бы был очень признателен этому человеку и в долгу бы не остался)
bestlover вне форума Ответить с цитированием
Старый 07.09.2009, 18:42   #7
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Наверняка, Delphi не глючный. Что-то не срослось. Если вы никогда не ставили в Delphi библиотеки сторонних разработчиков, то вполне возможно не знаете что и как делать. Прочтите внимательно "инструкцию" и попробуйте сделать так как в ней сказано (и больше никак). Это единственный путь регистрации компонентов в дельфи (если это библиотека компонентов, т.е. имеем файл с расширением dpk).
И еще, Delphi никакого отношения не имеет к XML. Есть компоненты, которые могут помочь, не более того. С xml сталкивались (а кто с этим не сталкивался), но это тоже ничего не меняет, т.к. необходимо (как минимум) внедрить в Delphi компоненты, которые могут помочь с разборкой файлов формата xml

----------
"Инструкция полная" к какому предмету? По программированию или регистрации компонентов? К последнему см. выше, к первому см. книги и поиск в инете.
Но самый эффективный путь - это выложить здесь исходники своего проекта. Тогда другие могут понять чего не получается и дать рекомендации.

Есть еще одна фишка (возможность). В Delphi палитра компонентов (components palette с закладками (вкладками) "Standard", "Additional", "Win32", ... и пр.) служит лишь для удобства программера, не более того. Из этого вытекает, что регистрация компонентов не обязательна и любой компонент (класс) можно объявить в своей программе как переменную. В программе (место зависит от задач) создается экземпляр компонента (класса) и дальнейшая работа с таким экземпляром ничем не отличается от работы с зарегистрированным компонентом.
Т.е. вы можете не парится с регистрацией вышеназванного компонента в системе Delphi.

В нашем, частном случае это может выглядеть так:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  XML: TECXMLParser; //здесь объявлем класс

  procedure DrawXMLItem(XMLItem: TXMLItem);
  var
    I : Integer;
  begin
    Memo1.Lines.Add(XMLItem.Name+' : '+XMLItem.Text);
    for i := 0 to XMLItem.SubItemCount-1 do
      DrawXMLItem(XMLItem.SubItems[i]);
  end;

begin
  XML := TECXMLParser.Create(Self); //здесь создаем экземпляр класса

  XML.LoadFromFile('E:\file.xml');  //здесь работаем с ним
  Memo1.Lines.BeginUpdate;
  DrawXMLItem(XML.Root);
  Memo1.Lines.EndUpdate;

  XML.Free; //здесь его пристреливаем, чтобы не докучал
end;
И все. Очень просто
Правда, чтобы это заработало необходимо Delphi рассказать где находится исходный текст с классом TECXMLParser, иначе компилятор растеряется и будет приставать с грязными предложениями типа: Undeclared identifier 'TECXMLParser'.
Чтобы этого избежать надо: через главное меню Project->Options... вызвать диалог, где щелкнуть вкладку (закладку) Directories/Conditionals. Найти строчку с меткой 'Search path'. Щелкнуть кнопку с многоточием. В новом диалоге тоже нажать кнопку с многоточием. Из вновь появившегося диалога выбрать каталог, где находится исходник (в нашем случае ECXMLParser.pas). После выбора каталога нажать кнопку 'Add', потом OK и снова OK. И потом уже с сознанием выполненного долга компилировать свою программу.

Последний раз редактировалось Скандербег; 08.09.2009 в 04:30. Причина: "Инструкция полная"
Скандербег вне форума Ответить с цитированием
Старый 09.09.2009, 11:28   #8
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
Злость

Цитата:
Правда, чтобы это заработало необходимо Delphi рассказать где находится исходный текст с классом TECXMLParser, иначе компилятор растеряется и будет приставать с грязными предложениями типа: Undeclared identifier 'TECXMLParser'.
Чтобы этого избежать надо: через главное меню Project->Options... вызвать диалог, где щелкнуть вкладку (закладку) Directories/Conditionals. Найти строчку с меткой 'Search path'. Щелкнуть кнопку с многоточием. В новом диалоге тоже нажать кнопку с многоточием. Из вновь появившегося диалога выбрать каталог, где находится исходник (в нашем случае ECXMLParser.pas). После выбора каталога нажать кнопку 'Add', потом OK и снова OK. И потом уже с сознанием выполненного долга компилировать свою программу.
Cделал как написано! Все равно выходит ошибка
Цитата:
Undeclared identifier 'TECXMLParser'
!
bestlover вне форума Ответить с цитированием
Старый 09.09.2009, 11:33   #9
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Цитата:
Сообщение от bestlover Посмотреть сообщение
Cделал как написано! Все равно выходит ошибка !
Еще надо добавить в текст:
Код:
...
implementation //это слово в тексте уже есть, его надо найти и следом вставить следующую строку
uses ECXMLParser;
...

Последний раз редактировалось Скандербег; 09.09.2009 в 11:39.
Скандербег вне форума Ответить с цитированием
Старый 12.09.2009, 09:07   #10
bestlover
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 23
По умолчанию

Ок) Это заработало) Открыл в Тmemo! а как сейчас оттуда вытаскивать числа? например после слова value? и как с ними делать операции? Например сложить 2 числа?
bestlover вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XML (Delphi) VadEr Помощь студентам 11 23.06.2009 23:32
xml в delphi /Arven/ Компоненты Delphi 0 23.04.2008 22:47
SQl+DELPHI+XML Рома БД в Delphi 5 17.08.2007 04:21
Xml и Delphi KlErik Общие вопросы Delphi 2 14.05.2007 09:54