Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 1
Регистрация: 19.12.2012
Сообщений: 108
1

Пробежка по xml в Delphi

27.03.2015, 23:05. Показов 2595. Ответов 2
Метки нет (Все метки)

Доброго времени суток, кто подскажет, как допустим обратиться к 3-ему item-у из xml файла http://news.yandex.ru/incident.rss ?
Использую для разбора XMLDocument
просто

Delphi
1
Memo1.lines.add(SIT.ChildNodes['channel'].ChildNodes[3].ChildNodes['title'].Text);
не выдает результат (
0

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

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2015, 23:05
Ответы с готовыми решениями:

Где найти мануал по парсингу XML? Как работать с XML в Delphi (в частности, TXMLDocument)?
Всех приветствую! Раньше несколько лет работал в Матлабе, но теперь приспичило писать программу...

Утренняя пробежка
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 70% от...

Пробежка по treeview
Здравствуйте в общем у меня такая проблема я создаю id для бд при помощи Ttreeview. В общем беру...

Задача утренняя пробежка 1 и 2
В первый день спортсмен пробежал x километров, а затем он каждый день увеличивал пробег на 70% от...

2
Продавец времени
5802 / 3208 / 735
Регистрация: 12.03.2015
Сообщений: 15,205
28.03.2015, 01:15 2
там кодировка utf-8, мож дело в этом?
0
13073 / 5858 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
28.03.2015, 06:40 3
Пример обработки XML кода с ресурса http://news.yandex.ru/auto.rss - новости про автомобили.

На форму надо положить:
Delphi
1
2
3
4
5
6
    IdHTTP1: TIdHTTP;           //Вкладка "Indy Clients" в палитре компонентов.
    XMLDocument1: TXMLDocument; //Вкладка "Internet" в палитре компонентов.
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
В Edit1 вводится URL веб-ресурса, в Memo1 выводится полученный XML код, в Memo2 выводятся результаты обработки XML документа.
Для кнопки Button1 надо создать обработчик события OnClick и его код оформить так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//Обработка XML документа.
procedure TForm1.Button1Click(Sender: TObject);
var
  Ms : TMemoryStream;
  IDoc, INode : IXMLNode;
  IList : IXMLNodeList;
  i, j : Integer;
begin
  Ms := TMemoryStream.Create;
  try
    //Получаем данные с веб-ресурса.
    IdHTTP1.Get(Edit1.Text, Ms); //Edit1.Text = 'http://news.yandex.ru/auto.rss'
 
    //Отключение разбора DOM модели.
    XMLDocument1.Active := False;
    //Загрузка XML кода в XMLDocument.
    Ms.Position := 0;
    XMLDocument1.LoadFromStream(Ms);
  finally
    FreeAndNil(Ms);
  end;
  //Запись XML кода в Memo1.
  Memo1.Text := UTF8Decode(XMLDocument1.XML.Text);
  //Настройки:
  //+[doAttrNull] - значение несуществующего атрибута будет представлено значением = NULL (Variant).
  //-[doAttrNull] - значение несуществующего атрибута будет представлено пустой строкой.
  //-[doNodeAutoCreate] - запрет на автоматическое создание узлов.
  //-[doAutoSave] - запрет на автоматическое сохранение документа при его закрытии.
  XMLDocument1.Options := XMLDocument1.Options - [doAttrNull, doNodeAutoCreate, doAutoSave];
  //Включаем разбор DOM модели.
  XMLDocument1.Active := True;
 
  //Сведения об извлечённых данных будем записывать в Memo2.
  Memo2.Clear;
  Memo2.Lines.Add('--------------------------------------------------');
 
  //Обработка XML документа.
 
  //Ссылка на интерфейс корневого элемента - <rss>.
  IDoc := XMLDocument1.DocumentElement;
  Memo2.Lines.Add(IDoc.NodeName + ' - channel - title: '
    + IDoc.ChildNodes['channel'].ChildNodes['title'].NodeValue);
  Memo2.Lines.Add('----------');
 
  //Коллекция дочерних элементов по отношению к элементу <rss> - <channel>.
  IList := IDoc.ChildNodes['channel'].ChildNodes;
  j := 0; //Счётчик элементов с тегом <item>.
  for i := 0 to IList.Count - 1 do //Перебор элементов коллекции.
    if IList[i].NodeName = 'item' then //Если встретился элемент с тегом <item>.
    begin
      Inc(j);
      INode := IList[i];
      Memo2.Lines.Add('№ ' + IntToStr(j) + '. ' + INode.NodeName + ':');
      Memo2.Lines.Add('title:'#9 + INode.ChildNodes['title'].NodeValue);
      Memo2.Lines.Add('link:'#9 + INode.ChildNodes['link'].NodeValue);
      Memo2.Lines.Add('description:'#9 + INode.ChildNodes['description'].NodeValue);
      Memo2.Lines.Add('pubDate:'#9 + INode.ChildNodes['pubDate'].NodeValue);
      Memo2.Lines.Add('guid:'#9 + INode.ChildNodes['guid'].NodeValue);
      Memo2.Lines.Add('----------');
    end;
 
  //Каретку и прокрутку в Memo2 устанавливаем на начало текстового поля.
  Memo2.SelStart := 0;
  Memo2.SelLength := 0;
  Memo2.Perform(EM_SCROLLCARET, 0, 0);
end;
Полученный XML код:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Яндекс.Новости: Авто</title>
    <link>http://news.yandex.ru/auto.html</link>
    <description>
      Первая в России служба автоматической обработки и систематизации новостей. Сообщения ведущих российских и мировых СМИ. Обновление в режиме реального времени 24 часа в сутки.
    </description>
    <image>
      <url>https://company.yandex.ru/i/50x23.gif</url>
      <link>http://news.yandex.ru/auto.html</link>
      <title>Яндекс.Новости: Авто</title>
    </image>
    <lastBuildDate>28 Mar 2015 06:23:19 +0300</lastBuildDate>
    <item>
      <title>«Заряженный» Cadillac ATS-V 2016 оказался мощнее и быстрее</title>
      <link>http://news.yandex.ru/yandsearch?cl4url=planet-today.ru%2Fnovosti%2Favto%2Fitem%2F7126-zaryazhennyy-cadillac-ats-v-2016-okazalsya-moschnee-i-bystree</link>
      <description>Прошедший в конце осени прошлого года в Лос-Анжелесе автосалон порадовал посетителей 455-сильной &amp;quot;заряженной&amp;quot; моделью ATS-V, которую разработчики назвали самой мощной, быстрой и дорогой версией в своем семействе. На сегодня стали известны свежие данные по этому автомобилю.</description>
      <pubDate>26 Mar 2015 17:39:57 +0300</pubDate>
      <guid>http://news.yandex.ru/yandsearch?cl4url=planet-today.ru%2Fnovosti%2Favto%2Fitem%2F7126-zaryazhennyy-cadillac-ats-v-2016-okazalsya-moschnee-i-bystree</guid>
    </item>
    <item>
      <title>Zotye T600 Sport — спортивный компактный кроссовер</title>
      <link>http://news.yandex.ru/yandsearch?cl4url=yasnonews.ru%2Fnews%2Frossiya_i_mir%2Fzotye-t600-sport-sportivniy-kompaktniy-krossover%2F</link>
      <description>Компания Zotye опубликовала изображения &amp;quot;спортивной&amp;quot; версии кроссовера Zotye T600. Харизматичный и агрессивный облик новинки напоминает Range Rover Evoque, но в этом случае речь идет лишь о преемственности, а не копировании.</description>
      <pubDate>28 Mar 2015 00:52:14 +0300</pubDate>
      <guid>http://news.yandex.ru/yandsearch?cl4url=yasnonews.ru%2Fnews%2Frossiya_i_mir%2Fzotye-t600-sport-sportivniy-kompaktniy-krossover%2F</guid>
    </item>
    <item>
      <title>Новый Chevrolet Malibu получит гибридную версию</title>
      <link>http://news.yandex.ru/yandsearch?cl4url=www.spbdnevnik.ru%2Fnews%2F2015-03-27%2Fnovy-Chevrolet-Malibu-poluchit-gibridnuyu-versiyu%2F</link>
      <description>Компания Chevrolet сообщила, что у седана Malibu нового поколения будет гибридная версия, которая поступит в дилерские центры весной следующего года. В основу Malibu Hybrid ляжет несколько модифицированная платформа Chevrolet Volt 2016.</description>
      <pubDate>27 Mar 2015 10:10:00 +0300</pubDate>
      <guid>http://news.yandex.ru/yandsearch?cl4url=www.spbdnevnik.ru%2Fnews%2F2015-03-27%2Fnovy-Chevrolet-Malibu-poluchit-gibridnuyu-versiyu%2F</guid>
    </item>
    <item>
      <title>Honda установила рекорд производства в Азии</title>
      <link>http://news.yandex.ru/yandsearch?cl4url=www.autocorner.ru%2Fhonda-ustanovila-rekord-proizvodstva-v-azii%2F</link>
      <description>Honda Motor Co объявила об очередном рекорде производства автомобилей. По итогам минувшего месяца в Азиатском регионе с конвейеров сошло – 96552 модели. Данный показатель на 3,8% превышает результаты отчетного периода прошлого года и устанавливает новый рекорд февраля.</description>
      <pubDate>28 Mar 2015 05:58:32 +0300</pubDate>
      <guid>http://news.yandex.ru/yandsearch?cl4url=www.autocorner.ru%2Fhonda-ustanovila-rekord-proizvodstva-v-azii%2F</guid>
    </item>
    
    <!-- ... -->
    <!-- ... -->
    <!-- ... -->
    
  </channel>
</rss>

Результат обработки:
Кликните здесь для просмотра всего текста
Код
--------------------------------------------------
rss - channel - title: Яндекс.Новости: Авто
----------
№ 1. item:
title:	«Заряженный» Cadillac ATS-V 2016 оказался мощнее и быстрее
link:	[url]http://news.yandex.ru/yandsearch?cl4url=planet-today.ru%2Fnovosti%2Favto%2Fitem%2F7126-zaryazhennyy-cadillac-ats-v-2016-okazalsya-moschnee-i-bystree[/url]
description:	Прошедший в конце осени прошлого года в Лос-Анжелесе автосалон порадовал посетителей 455-сильной &quot;заряженной&quot; моделью ATS-V, которую разработчики назвали самой мощной, быстрой и дорогой версией в своем семействе. На сегодня стали известны свежие данные по этому автомобилю.
pubDate:	26 Mar 2015 17:39:57 +0300
guid:	[url]http://news.yandex.ru/yandsearch?cl4url=planet-today.ru%2Fnovosti%2Favto%2Fitem%2F7126-zaryazhennyy-cadillac-ats-v-2016-okazalsya-moschnee-i-bystree[/url]
----------
№ 2. item:
title:	Zotye T600 Sport — спортивный компактный кроссовер
link:	[url]http://news.yandex.ru/yandsearch?cl4url=yasnonews.ru%2Fnews%2Frossiya_i_mir%2Fzotye-t600-sport-sportivniy-kompaktniy-krossover%2F[/url]
description:	Компания Zotye опубликовала изображения &quot;спортивной&quot; версии кроссовера Zotye T600. Харизматичный и агрессивный облик новинки напоминает Range Rover Evoque, но в этом случае речь идет лишь о преемственности, а не копировании.
pubDate:	28 Mar 2015 00:52:14 +0300
guid:	[url]http://news.yandex.ru/yandsearch?cl4url=yasnonews.ru%2Fnews%2Frossiya_i_mir%2Fzotye-t600-sport-sportivniy-kompaktniy-krossover%2F[/url]
----------
№ 3. item:
title:	Новый Chevrolet Malibu получит гибридную версию
link:	[url]http://news.yandex.ru/yandsearch?cl4url=www.spbdnevnik.ru%2Fnews%2F2015-03-27%2Fnovy-Chevrolet-Malibu-poluchit-gibridnuyu-versiyu%2F[/url]
description:	Компания Chevrolet сообщила, что у седана Malibu нового поколения будет гибридная версия, которая поступит в дилерские центры весной следующего года. В основу Malibu Hybrid ляжет несколько модифицированная платформа Chevrolet Volt 2016.
pubDate:	27 Mar 2015 10:10:00 +0300
guid:	[url]http://news.yandex.ru/yandsearch?cl4url=www.spbdnevnik.ru%2Fnews%2F2015-03-27%2Fnovy-Chevrolet-Malibu-poluchit-gibridnuyu-versiyu%2F[/url]
----------
№ 4. item:
title:	Honda установила рекорд производства в Азии
link:	[url]http://news.yandex.ru/yandsearch?cl4url=www.autocorner.ru%2Fhonda-ustanovila-rekord-proizvodstva-v-azii%2F[/url]
description:	Honda Motor Co объявила об очередном рекорде производства автомобилей. По итогам минувшего месяца в Азиатском регионе с конвейеров сошло – 96552 модели. Данный показатель на 3,8% превышает результаты отчетного периода прошлого года и устанавливает новый рекорд февраля.
pubDate:	28 Mar 2015 05:58:32 +0300
guid:	[url]http://news.yandex.ru/yandsearch?cl4url=www.autocorner.ru%2Fhonda-ustanovila-rekord-proizvodstva-v-azii%2F[/url]
----------
  ...
  ...
  ...
----------
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2015, 06:40

Пробежка по списку с выборкой значений по условию
Имеется лист: List&lt;String&gt; myArray = new {&quot;текст&quot;, /*1*/ ...

Рекурсивная пробежка по массиву; глубина ячеек массива заранее неизвестна
Есть массив, его элементами могут быть как данные, так и другие массивы, содержащие в себе массивы,...

XML в delphi
всем доброго времени суток. есть некий xml-файл. моя задача-выудить из него возможные аттрибуты и...

Delphi xml
Имеется XML (иногда некоторых тегов может не быть): &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.