Delphi-Help

  • Increase font size
  • Default font size
  • Decrease font size
Главная Форум
Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

чтение XML
(1 чел.) (1) гость
  • Страница:
  • 1

ТЕМА: чтение XML

чтение XML 8 года, 9 мес. назад #31

  • Gudzik11
  • Вне сайта
  • Новичок
  • Постов: 4
  • Репутация: 2
Здравствуйте! Облазил весь интернет но так и не нашёл понятного для меня метода . Пожалуйста помогите вывести в Label3 значение
<cloud> но не из категории <day date="2011-11-29" hour="15">
а к примеру <day date="2011-11-29" hour="21">

Вложенный файл:

Имя файла: _XML.rar
Размер файла: 249674

Re:чтение XML 8 года, 9 мес. назад #33

  • admin
  • Вне сайта
  • Администратор
  • Постов: 19
  • Репутация: 0
Перебор по одной ветке сделать можно так:
   var   S: String;
  I: Integer;


    XMLDocument1.FileName:='1.xml';
    XMLDocument1.Active := true;

  for I := 0 to XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes['day'].ChildNodes.Count -1 do
  begin
  if XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes['day'].ChildNodes[I].NodeName = 'cloud' then
      begin
      S := XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes['day'].ChildNodes[I].Text;
      Memo4.Lines.Add(S + ' °С');
      end;

  end;
  next;


Т.е. в XML файле должно быть:
<forecast>
   <day date="2011-12-01" hour="9">
      <cloud>30</cloud> 
      <cloud>20</cloud> 
      <cloud>10</cloud> 
      <cloud>5</cloud> 
      <pict>_3_pasmurno.gif</pict> 
      <ppcp>0</ppcp> 
....


Но, надо подумать...
С уважением,
администратор сайта delphi-help.ru

Re:чтение XML 8 года, 9 мес. назад #35

  • admin
  • Вне сайта
  • Администратор
  • Постов: 19
  • Репутация: 0
Компонент для работы с xml.

Просто распокуйте все файлы в папку с проектом.
В Uses добавьте NativeXml.
Также там есть небольшая документация.

Статья по теме:
www.webdelphi.ru/2010/05/nativexml-v-delphi-2010/
С уважением,
администратор сайта delphi-help.ru
Изменено: 8 года, 9 мес. назад от admin.

Re:чтение XML 8 года, 9 мес. назад #37

  • Gudzik11
  • Вне сайта
  • Новичок
  • Постов: 4
  • Репутация: 2
Компонент для работы с xml.

Просто распокуйте все файлы в папку с проектом.
В Uses добавьте NativeXml.
Также там есть небольшая документация.

Статья по теме:
www.webdelphi.ru/2010/05/nativexml-v-delphi-2010/


это для delphi 2010
а я использую delphi 7

Перебор по одной ветке сделать можно так:


можно но ка кто не пойму как вытянуть все значения

вот пытаюсь сделать так

тесть есть несколько тэгов <day я пытаюсь пронумеровать их так

procedure TForm1.Pogoda(Sender: TObject);
      var
        q: Integer ;
        s: string ;
 begin
   q:=1;
   GetDir(0,s);
    memo1.Text:=Utf8ToAnsi(IdHTTP1.Get('http://xml.weather.co.ua/1.2/forecast/19?dayf=5&userid=yoursite_com'));
    Memo1.Text:=Replace(Memo1.Text,'<?xml version="1.0" encoding="UTF-8"?>','<?xml version="1.0" encoding="windows-1251"?>');
   while  q<>40 do
   begin
    q:=q+1 ;
    Memo1.Text:=Replace(Memo1.Text,'</day','</day'+IntToStr(q));
    Memo1.Text:=Replace(Memo1.Text,'<day','<day'+IntToStr(q));
    Label1.Caption:= IntToStr(q);
   end;
   Memo1.Lines.SaveToFile(s+'\1.xml');
    {îòêðûâàåì XML}
    XMLDocument1.FileName:='1.xml';
    XMLDocument1.Active := true;
    Memo2.Text:=XMLDocument1.xml.Text ;
    XMLDocument1.Active := False ;
 end;


но на выходе получяю
<day4039383736353433323130292827262524232221201918 171615141312111098765432
подскажите как сделать чтоб получялось
<day1
<day2
<day3

Re:чтение XML 8 года, 9 мес. назад #38

  • admin
  • Вне сайта
  • Администратор
  • Постов: 19
  • Репутация: 0
На днях сделаю, тогда отпишусь.
Компонент я проверял на Delphi 7. Работает.
Статья для 10, но всё будет тоже самое...
С уважением,
администратор сайта delphi-help.ru

Re:чтение XML 8 года, 9 мес. назад #39

  • Gudzik11
  • Вне сайта
  • Новичок
  • Постов: 4
  • Репутация: 2
спасибо уже решил проблему. А вот здесь застрял опять.

Нужно вытащить из определённого тега значения к примеру

из такого XML

<forecast>
<day date="2011-12-06" hour="3">
<day date="2011-12-06" hour="9">
<day date="2011-12-06" hour="15">
<day date="2011-12-06" hour="21">
<day date="2011-12-07" hour="3">
<day date="2011-12-07" hour="9">
<day date="2011-12-06" hour="15"
<day date="2011-12-06" hour="21"
    //и тд>> 

нужно вытащить значение <cloud> из ветки <day date="2011-12-07" hour="3">
можно сделать так

XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes[4].ChildNodes['cloud'].Text


и всё было бы хорошо но проблема в том что мой XML меняется 4 раза за день
и к вечеру он становиться таким
<forecast>
<day date="2011-12-06" hour="21">
<day date="2011-12-07" hour="3">
<day date="2011-12-07" hour="9">
<day date="2011-12-06" hour="15"
<day date="2011-12-06" hour="21"
    //и тд>> 
[/code]

так вот стала проблема ка вытащить именно из
<day date="2011-12-07" hour="3">

пробую так но что то делаю не правильно

for i := 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do
      begin
     if (XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes['i'].Attributes['date']='2011-12-07') and (XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes['i'].Attributes['hour']='3') then
          begin
            sPanel22.Caption:= XMLDocument1.DocumentElement.ChildNodes['forecast'].ChildNodes[i].ChildNodes['cloud'].Text+' °С';
          end
          else
             begin
                sPanel22.Caption:='пипец';
             end;
        end;

но пишет почему то 'пипец'

может кто не будь подсказать как это сделать
  • Страница:
  • 1

Авторизация



Счетчики