Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как считать XML


Автор: mrVerus 23.4.2009, 08:58
Я плохо знаю XML побывал стандартные примеры не вышло как считать данные из этого файла 28825_1.xml1, напишите пожайлуста пример
как можно считать параметры умн не получается 

Автор: Лапоть 23.4.2009, 10:43
Никак. Он же пустой!

Автор: mrVerus 24.4.2009, 05:27
Дико изаиняюсь

Автор: Лапоть 24.4.2009, 07:28
Простой, как лапоть, XML... Если честно, то даже не интересно его разматывать! 
Цитата(mrVerus @  23.4.2009,  09:58 Найти цитируемый пост)
стандартные примеры не вышло как считать данные
Код покажи, тогда хоть можно будет твои ошибки править smile 

Автор: mrVerus 24.4.2009, 10:46
XMLDocument1.LoadFromFile('c:\28825_1.xml');
XMLDocument1.Active := true;
// Здесь все получается 
Edit2.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['REPORT'].Attributes['type']);
// А вот здесь edit3 получает пустую строку
Edit3.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['TOWN'].Attributes['index']);
Edit4.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['FORECAST'].Attributes['day']);
XMLDocument1.Active := false;

Как получить все параметры7
Получилось ли у Вас smile 7

Автор: pseud 24.4.2009, 11:29
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  nodeREPORT: IXMLNode;
  nodeTOWN: IXMLNode;
  nodeFORECAST: IXMLNode;
begin
  if not OpenDialog1.Execute then
    Exit;

  XMLDocument1.LoadFromFile(OpenDialog1.FileName);
  try
    XMLDocument1.Active := True;

    nodeREPORT := XMLDocument1.DocumentElement.ChildNodes['REPORT'];
    Edit1.Text := nodeREPORT.Attributes['type'];

    nodeTOWN := nodeREPORT.ChildNodes['TOWN'];
    Edit2.Text := nodeTOWN.Attributes['index'];
    Edit3.Text := nodeTOWN.Attributes['sname'];
    Edit4.Text := nodeTOWN.Attributes['latitude'];
    Edit5.Text := nodeTOWN.Attributes['longitude'];

    nodeFORECAST := nodeTOWN.ChildNodes['FORECAST'];
    Edit6.Text := nodeFORECAST.Attributes['day'];
  finally
    XMLDocument1.Active := false;
  end;
end;

Автор: Лапоть 24.4.2009, 11:40
Корень - это MMWEATHER
Узел первого уровня - REPORT
Узел второго уровня TOWN, а под ним - коллекция узлов FORECAST с атрибутами и своими детишками.

XMLDocument1.DocumentElement - это твой корень, поэтому данные для его дитёнка REPORT ты считал. А вот дитёнка с именем TOWN у корня НЕТ!

Код

var
  root, node1, node2, node3, node4 : IXMLNode;
  i : integer;
begin
  root := XMLDocument1.DocumentElement;
  node1 := root.ChildNodes.FindNode('REPORT');
  // ну а уж данные сам вытаскивай !
  node2 := node1.ChildNodes.FindNode('TOWN');
  for i := 0 to node2.ChildNodes.Count - 1 do begin
    node3 := node2.ChildNodes.Nodes[i];
    // а для коллекции его детишек - node4. Сам напиши!
  end;
end;

PS - а почему файл так коряво отформатирован? Я его через AkelPad смотрел...


Автор: mrVerus 24.4.2009, 11:52
Огромное спасибо

Автор: Aleksandr2677 5.2.2013, 21:36
Добрый день, подниму старую тему.
Помогите продолжить код который описан выше. Я в этом деле новичёк, стаж меньше недели, так  что не пинайте сильно.
Не могу до конца распарсить xml:   informer.gismeteo.ru
Дошёл только до FORECAST а значения   PHENOMENA  PRESSURE   TEMPERATURE   WIND   RELWET   HEAT вывести не могу.
Код

procedure TForm1.Button2Click(Sender: TObject);
begin


    XMLDocument1.LoadFromFile('http://informer.gismeteo.ru/xml/27612_1.xml');

     try
      XMLDocument1.Active := True;

       nodeREPORT := XMLDocument1.DocumentElement.ChildNodes['REPORT'];
    Edit1.Text := nodeREPORT.Attributes['type'];
    nodeTOWN := nodeREPORT.ChildNodes['TOWN'];
    Edit2.Text := nodeTOWN.Attributes['index'];
    Edit3.Text := nodeTOWN.Attributes['sname'];
    Edit4.Text := nodeTOWN.Attributes['latitude'];
    Edit5.Text := nodeTOWN.Attributes['longitude'];
    nodeFORECAST := nodeTOWN.ChildNodes['FORECAST'];
    Edit6.Text := nodeFORECAST.Attributes['day'];
    Edit7.Text := nodeFORECAST.Attributes['month'];
    Edit8.Text := nodeFORECAST.Attributes['year'];
    Edit9.Text := nodeFORECAST.Attributes['hour'];
    Edit10.Text := nodeFORECAST.Attributes['tod'];
    Edit11.Text := nodeFORECAST.Attributes['predict'];
    Edit12.Text := nodeFORECAST.Attributes['weekday'];

     //Дальше не знаю что писать, тыкал наугад . Как добраться до
     // PHENOMENA  PRESSURE   TEMPERATURE   WIND   RELWET   HEAT  не знаю((

    Edit13.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['PHENOMENA'].Attributes['cloudiness']);
    Edit14.Text := VarToStr(XMLDocument1.DocumentElement.ChildNodes['PHENOMENA'].Attributes['precipitation']);


     finally
    XMLDocument1.Active := false;


 end;
end;



Выше конечно описан способ но я его раскурить немогу((

Автор: Aleksandr2677 8.2.2013, 23:21
Плиз. Помогите с програмкой. Я раньше софт для ПК не писал. А тут приспичило сделать приспособу для своего телеграфа, которая-бы выводила азбукой морзе прогноз погоды.  Я уже практически во всём разобрался, остался парсинг. 


Автор: Aleksandr2677 9.2.2013, 14:13
Вроде продвинулся немного вперёд, пока отбой)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)