Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML вытащить нужное значение, пмогите реализовать. 
:(
    Опции темы
Sanchezzz
  Дата 3.8.2007, 20:42 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 5
Всего: 60



С XML мало работал. 
Делаю прогноз погоды с сайта.
Суть следующий я получаю с нета файл в Xml формате это сделал.. файл содержащий такой код 
Код

<?xml version="1.0"?>
<MMWEATHER>
 <REPORT type="frc3">
  <TOWN index="27612" sname="%CC%EE%F1%EA%E2%E0" latitude="56" longitude="38">
    <FORECAST day="3" month="8" year="2007" hour="3" tod="0" predict="18" weekday="6">
     <PHENOMENA cloudiness="3" precipitation="8" rpower="1" spower="1"/>
     <PRESSURE max="745" min="743"/>
     <TEMPERATURE max="18" min="16"/>
     <WIND min="2" max="5" direction="1"/>
     <RELWET max="96" min="91"/>
     <HEAT min="16" max="18"/>
    </FORECAST>
    <FORECAST day="3" month="8" year="2007" hour="9" tod="1" predict="24" weekday="6">
     <PHENOMENA cloudiness="3" precipitation="4" rpower="1" spower="0"/>
     <PRESSURE max="744" min="742"/>
     <TEMPERATURE max="20" min="18"/>
     <WIND min="3" max="6" direction="1"/>
     <RELWET max="92" min="87"/>
     <HEAT min="18" max="20"/>
    </FORECAST>
    <FORECAST day="3" month="8" year="2007" hour="15" tod="2" predict="30" weekday="6">
     <PHENOMENA cloudiness="3" precipitation="4" rpower="1" spower="0"/>
     <PRESSURE max="744" min="742"/>
     <TEMPERATURE max="21" min="19"/>
     <WIND min="3" max="6" direction="3"/>
     <RELWET max="89" min="84"/>
     <HEAT min="19" max="21"/>
    </FORECAST>
    <FORECAST day="3" month="8" year="2007" hour="21" tod="3" predict="36" weekday="6">
     <PHENOMENA cloudiness="3" precipitation="4" rpower="1" spower="0"/>
     <PRESSURE max="743" min="741"/>
     <TEMPERATURE max="18" min="16"/>
     <WIND min="3" max="6" direction="2"/>
     <RELWET max="95" min="90"/>
     <HEAT min="16" max="18"/>
    </FORECAST>
  </TOWN>
 </REPORT>
</MMWEATHER>

надо его преобразовать или вытащить значения отдельно каждое значении в свой либел помогите с алгоритмом. полный исходник потом выложу в этом топике. 
Структура кода всегда одинаковая только значения меняются. 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ALeXandrK
  Дата 3.8.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Код

uses  XMLDoc, XMLIntf;
procedure ...
var XMLDoc: IXMLDocument;
      Node:IXMLNode;
begin
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.LoadFromFile(FileName);
  Node := XMLDoc.DocumentElement.ChildNodes['REPORT'];
  Node := Node.ChildNodes['TOWN'];
  Label.Caption := Node.Attributes['latitude'];
...
end;


ChildNodes - ветки
Attributes   - атрибуты
...

Вообщем я привел легкий пример. Если что ищи в Helpe по непонятным пунктам.



Это сообщение отредактировал(а) ALeXandrK - 3.8.2007, 21:57


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
LECIAN
Дата 3.8.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 8.7.2007

Репутация: нет
Всего: нет



Еще пример с IXMLDocument
(переменные типа aXXXX_YYYY только  для примера,  XXX - тэг, YYY- атрибут)
Код

var
   Xml: IXmlDocument;
begin
   Xml:=TXmlDocument.Create(aXMLFileName);
   Xml.Active:=true;
   with Xml.ChildNodes.Nodes['MMWEATHER'] do  begin // открываем <MMWEATHER>
      aReport_Type:=ChildNodes.Nodes['REPORT'].Attributes['type']; //<REPORT type="frc3">
      With ChildNodes.Nodes['REPORT'] do begin  // открываем <REPORT type="frc3">
          aTown_Index:=ChildNodes.Nodes['TOWN'].Attributes['index']; //<TOWN index="27612"
          aTown_Sname:=ChildNodes.Nodes['TOWN'].Attributes['sname'];//sname="%CC%EE%F1%EA%E2%E0"
          aTown_Latitude:=ChildNodes.Nodes['TOWN'].Attributes['latitude']; // latitude="56"
          aTown_Longitude:=ChildNodes.Nodes['TOWN'].Attributes['longitude']; //longitude="38">
            With ChildNodes.Nodes['TOWN'] do begin // открываем <TOWN .... >
              aForeCast_Day:=ChildNodes.Nodes['FORECAST'].Attributes['day']; //<FORECAST day="3"
              // аналогично month="8" year="2007" hour="3" tod="0" predict="18" weekday="6"
              With ChildNodes.Nodes['FORECAST'] do begin //открываем  <FORECAST ... >
                aPhenomena_cloudiness:=ChildNodes.Nodes['PHENOMENA'].Attributes['cloudiness']; // <PHENOMENA cloudiness="3"
                //так же  PHENOMENA до конца
                //и другие ноды аналогично:
               {  <PRESSURE max="745" min="743"/>
                 <TEMPERATURE max="18" min="16"/>
                 <WIND min="2" max="5" direction="1"/>
                 <RELWET max="96" min="91"/>
                 <HEAT min="16" max="18"/>  }
              end;  //закрываем  <FORECAST ... >
            end;  //закрываем  <TOWN ... >
        end;  //закрываем  <REPORT ... >
    end;  //закрываем  <MMWEATHER ... >
end;


Технология проста: проходишь древо с помощью With ... do и читаешь где надо нужные атрибуты smile 


PM MAIL   Вверх
EvilsInterrupt
Дата 4.8.2007, 09:14 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: 3
Всего: 9



Sanchezzz, Такс, мне друзья показали, а я тебе покажу!
Если документ будет до 5 КБ, то:
1. File -> New -> Other -> XML
2. Выбираешь XML Databinding
3. в нем показываешь путь до твоего уже готового XML-файла
4. Настраиваешь все типы
5. Жмешь на ок
6. Даешь название модулю
7. Юзаешь как будто бы этот TStrings и все!!!

пример:
Код

var xmlif : IXMLSettings_of_ApplicationType // вобщем как там назывался твой xml-файл то и ищи )))
begin
  try
   xmlif := LoadSettings_of_Application; // даст экспешн, если xml-файл не найден!!
   edit.text := xmlif.FileName
  except
   xmlif := NewSettings_of_Application; // создаем xml-файл,если вдруг его нету! )
   xmlif.FileName := edit.text;
   xmlif.ownerdocument.savetofile('blya_forever.xml'); // сохраняем
  end;


и все!
PM MAIL WWW ICQ Jabber   Вверх
Pavelbej
Дата 4.8.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Можно присоединится к вопросу?

Мне нужно из файла XML загрузить данные в Listview.
Пример:
Код

<?xml version="1.0" encoding="ISO8859-1" ?>
  <Programing>
    <RSDN>http://www.rsdn.ru</RSDN>
    <Vingrad>http://www.vingrad.ru</Vingrad>
   </Programing>
  <SearchEngine>
    <Google>http://www.google.com</Google>
    <Rambler>http://www.rambler.ru</Rambler>
   </SearchEngine>


Надо чтобы в Listview данные добавлялись в таком виде:

1. Programing, SearchEngine - записать куда нибудь в StringList
2. В Listview (два столбца), например для Programing, получить:

Описание                             Ссылка

RSDN                                http://www.rsdn.ru
Vingrad                             http://www.vingrad.ru

Как можно это реализовать? Никак не могу понять.
PM MAIL   Вверх
ALeXandrK
  Дата 4.8.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Все делается теми же методами, только нужно знать куда данные добавлять.
Чтобы разобраться как читать данные из XML - читай выше, а как добавлять данные
в Listview - это уже другой вопрос, а значит и другая тема.


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Sanchezzz
  Дата 4.8.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 5
Всего: 60



ALeXandrK, LECIAN спасибо я разобрался..

как и обещал исходник прогноза погоды. на 4315 городов базу исправлять придется вам или писать ее по другому.. 

Pavelbej лутшеб создал оддельную тему а то я эту хотел закрыть.

точно также как и в моем случии
добавлять так:
Код

begin
with  ListView1.Items.Add do begin
        ImageIndex := -1;
        Caption :='http://www.rsdn.ru';
        SubItems.Add('http://www.vingrad.ru');
end;


EvilsInterrupt - я все сделал даные у меня 2 макс 3 кб

Это сообщение отредактировал(а) Sanchezzz - 4.8.2007, 20:04

Присоединённый файл ( Кол-во скачиваний: 31 )
Присоединённый файл  Pogoda.rar 47,92 Kb


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Pavelbej
Дата 5.8.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Ладно создам другую тему. Только хочу сказать что в ListView я знаю как добавлять, проблема состоит в том как присвоить например для Caption := Vingrad, а для SubItems.Add('http://www.vingrad.ru'). И так по всей категории Programing, до SearchEngine.
Из SearchEngine, например, также нужно прочесть все ссылки и их описания, но добавлять в файл и тд.
PM MAIL   Вверх
ALeXandrK
  Дата 5.8.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 342
Регистрация: 31.1.2007
Где: Санкт-Петербург

Репутация: 3
Всего: 6



Pavelbej: У тебя неверная структура XML файла.
Первая нода должна быть единственной, т.е.:
Код

<?xml version="1.0" encoding="ISO8859-1" ?>
<FIRSTNODE>
  <Programing>
    <RSDN>http://www.rsdn.ru</RSDN>
    <Vingrad>http://www.vingrad.ru</Vingrad>
   </Programing>
  <SearchEngine>
    <Google>http://www.google.com</Google>
    <Rambler>http://www.rambler.ru</Rambler>
   </SearchEngine>
</FIRSTNODE>


Накидал легкий примерчик для тебя (без ListView, чтоб не заморачиваться):
Код

procedure ...
var XMLDoc: IXMLDocument;
    Node:IXMLNode;
    i,l:Cardinal;
begin
if not(dlgOpen1.Execute(frmXML.Handle)) then Exit;

  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.LoadFromFile(dlgOpen1.FileName);
  Node := XMLDoc.DocumentElement;

  for l := 0 to Node.ChildNodes.Count - 1 do  //цикл по первой ветке
  begin
  lst3.Items.Add(Node.ChildNodes[l].NodeName);  //вытягиваем название ноды
    for I := 0 to Node.ChildNodes[l].ChildNodes.Count-1 do  //цикл по второй ветке
    begin
      lst1.Items.Add(Node.ChildNodes[l].ChildNodes[i].NodeName);//вытягиваем название ноды
      lst2.Items.Add(Node.ChildNodes[l].ChildNodes[i].NodeValue); //вытягиваем значение ноды
    end;
  end;


Тут есть все, для того, чтобы вытащить то, что нужно из файла. 
Надеюсь запихнуть куда нужно сможешь сам, но, если что, обращайся smile 



Это сообщение отредактировал(а) ALeXandrK - 5.8.2007, 13:19

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  XMLfromALeX.rar 6,23 Kb


--------------------
Богат не/ни тот, у кого много, а тот, кому хватает
PM WWW   Вверх
Pavelbej
Дата 5.8.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



ALeXandrK,  спасибо, то что нужно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.