Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.03.2010, 07:00
Аватар для r1x
r1x r1x вне форума
Начинающий
 
Регистрация: 15.07.2009
Адрес: KZ, Pavlodar
Сообщения: 110
Репутация: 10
Восклицание XML Files...

Здравствуйте!
Помогите написать парсер используя стд. компанент TXMLDocument
XLM Файл:
Код:
<MMWEATHER>
<REPORT type="frc3">
<TOWN index="27612" sname="%CC%EE%F1%EA%E2%E0" latitude="56" longitude="38">
<FORECAST day="01" month="03" year="2010" hour="03" tod="0" predict="0" weekday="2">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="748" min="746"/>
<TEMPERATURE max="-3" min="-1"/>
<WIND min="3" max="5" direction="4"/>
<RELWET max="99" min="97"/>
<HEAT min="-5" max="-3"/>
</FORECAST>
<FORECAST day="01" month="03" year="2010" hour="09" tod="1" predict="0" weekday="2">
<PHENOMENA cloudiness="3" precipitation="6" rpower="0" spower="0"/>
<PRESSURE max="747" min="745"/>
<TEMPERATURE max="-2" min="0"/>
<WIND min="4" max="6" direction="3"/>
<RELWET max="99" min="97"/>
<HEAT min="-5" max="-3"/>
</FORECAST>
<FORECAST day="01" month="03" year="2010" hour="15" tod="2" predict="0" weekday="2">
<PHENOMENA cloudiness="3" precipitation="4" rpower="0" spower="0"/>
<PRESSURE max="744" min="742"/>
<TEMPERATURE max="3" min="1"/>
<WIND min="5" max="7" direction="3"/>
<RELWET max="99" min="97"/>
<HEAT min="-2" max="0"/>
</FORECAST>
<FORECAST day="01" month="03" year="2010" hour="21" tod="3" predict="0" weekday="2">
<PHENOMENA cloudiness="3" precipitation="4" rpower="0" spower="0"/>
<PRESSURE max="742" min="740"/>
<TEMPERATURE max="4" min="2"/>
<WIND min="6" max="8" direction="3"/>
<RELWET max="99" min="97"/>
<HEAT min="-2" max="0"/>
</FORECAST>
</TOWN>
</REPORT>
</MMWEATHER>

пытаюсь получить значение, а он возращает пустоту
Код:
direction:=VarToStr(ChildNodes['TEMPERATURE'].Attributes['max']);
__________________
[ iNewStar.Ru ] - Продам!
Вопросы в ПМ
Ответить с цитированием
  #2  
Старый 03.03.2010, 00:16
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Сообщение

Код:
procedure TForm1.Button1Click(Sender: TObject);
var Node : IXMLNode;
    Node2 : IXMLNode;
    i:integer;
begin
 // в файле - твой xml
 XMLDocument1.LoadFromFile(ExtractFilePath(Application.ExeName)+'test.xml');

 // Проходим по узлам вниз
 // для наглядности написал так, но можно и в одну строчку извратиться
 Node := XMLDocument1.Node;
 Node := Node.ChildNodes.Nodes['MMWEATHER'];
 Node := Node.ChildNodes.Nodes['REPORT'];
 Node := Node.ChildNodes.Nodes['TOWN'];

 // у тебя 4 узла с именем FORECAST
 // вот я и решил для каждого выдернуть значение макс. температуры
 for i:=0 to Node.ChildNodes.Count-1 do
  begin
   Node2 := Node.ChildNodes.Nodes[i]; // FORECAST
   Node2 := Node2.ChildNodes.Nodes['TEMPERATURE'];
   Memo1.Lines.Add( Node2.AttributeNodes.Nodes['max'].NodeValue );
  end;
end;
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #3  
Старый 03.03.2010, 09:42
Аватар для r1x
r1x r1x вне форума
Начинающий
 
Регистрация: 15.07.2009
Адрес: KZ, Pavlodar
Сообщения: 110
Репутация: 10
Хорошо

Цитата:
Сообщение от Rokuell
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Node : IXMLNode;
    Node2 : IXMLNode;
    i:integer;
begin
 // в файле - твой xml
 XMLDocument1.LoadFromFile(ExtractFilePath(Application.ExeName)+'test.xml');

 // Проходим по узлам вниз
 // для наглядности написал так, но можно и в одну строчку извратиться
 Node := XMLDocument1.Node;
 Node := Node.ChildNodes.Nodes['MMWEATHER'];
 Node := Node.ChildNodes.Nodes['REPORT'];
 Node := Node.ChildNodes.Nodes['TOWN'];

 // у тебя 4 узла с именем FORECAST
 // вот я и решил для каждого выдернуть значение макс. температуры
 for i:=0 to Node.ChildNodes.Count-1 do
  begin
   Node2 := Node.ChildNodes.Nodes[i]; // FORECAST
   Node2 := Node2.ChildNodes.Nodes['TEMPERATURE'];
   Memo1.Lines.Add( Node2.AttributeNodes.Nodes['max'].NodeValue );
  end;
end;

Спс..большое!
__________________
[ iNewStar.Ru ] - Продам!
Вопросы в ПМ
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter