Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2010, 15:46   #11
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

и еще)
а как узнать количество тегов?
например сколько тегов results в коде?
beemoto вне форума Ответить с цитированием
Старый 09.04.2010, 22:17   #12
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

Ну ктонибудь, плиз =(
beemoto вне форума Ответить с цитированием
Старый 10.04.2010, 17:18   #13
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Узнать количество и имена дочерних элементов, например, узла meta можно так:
Код:
  for i := 0 to  XMLDocument1.DocumentElement.ChildNodes.Count do
  begin
    Listbox1.Items.Add(XMLDocument1.DocumentElement.ChildNodes['meta'].ChildNodes[i].NodeName);
  end;
Аналогично можно просмотреть дочерние элементы и др. узлов в XML файле.

P.S. Если я неправильно понял вопрос, то опишите конкретнее проблему
SolovejK вне форума Ответить с цитированием
Старый 10.04.2010, 21:26   #14
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

это я знаю =)
мне к сожалению надо количество узнать количество элементов...
дело в том что я пишу парсер для RSS, вот пример RSS документа:
Код:
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
 
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>
 
    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>
 
    <item>
      <title>Space Exploration</title>
      <link>http://liftoff.msfc.nasa.gov/</link>
      <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
        will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
      <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
    </item>
 
    <item>
      <title>The Engine That Does More</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
      <description>Before man travels to Mars, NASA hopes to design new engines
        that will let us fly through the Solar System more quickly.  The proposed
        VASIMR engine would do that.</description>
      <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
    </item>
 
    <item>
      <title>Astronauts' Dirty Laundry</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
      <description>Compared to earlier spacecraft, the International Space
        Station has many luxuries, but laundry facilities are not one of them.
        Instead, astronauts have other options.</description>
      <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
    </item>
  </channel>
</rss>
тут элементы item находятся в channel с другими элементами. Вот я все уже сделал только для обращения к каждому элементу item мне надо засунуть в цикл а для этого надо знать сколько их =(
использовать copy & pos я бы нехотел)

Последний раз редактировалось beemoto; 10.04.2010 в 21:30.
beemoto вне форума Ответить с цитированием
Старый 10.04.2010, 22:15   #15
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Если я правильно понял тебе нужно узнать количество узлов item в твоем xml файле:

Код:
var
  i,k : integer;
  Uzel : IXMLNode;

begin
  XMLDocument1.Active := true;
  XMLDocument1.LoadFromFile(ExtractFilePath(Application.ExeName) + '1.xml');
  k:=0;
  Uzel := XMLDocument1.DocumentElement.ChildNodes['channel'];
  for i := 0 to Uzel.ChildNodes.Count-1 do
  begin
    if Uzel.ChildNodes[i].NodeName = 'item' then inc(k);
  end;
   Edit1.Text := IntToStr(k);

  XMLDocument1.Active := false;
end;
SolovejK вне форума Ответить с цитированием
Старый 11.04.2010, 13:04   #16
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

опять же большое спасибо!
и...)
для работы со вторым элементом item, надо использовать только так: .ChildNodes[2] или можно както с названием? нп. ChildNodes['channel', 2] типо такого)
beemoto вне форума Ответить с цитированием
Старый 11.04.2010, 15:53   #17
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

На сколько мне известно, такой способ
Цитата:
ChildNodes['channel', 2]
не применим
SolovejK вне форума Ответить с цитированием
Старый 11.04.2010, 18:49   #18
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

я знаю, я имеюю ввиду как обратится ко второму тегу item
если не путаю то так: ChildNodes['item'].node[2]
beemoto вне форума Ответить с цитированием
Старый 11.04.2010, 22:01   #19
SolovejK
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 52
По умолчанию

Дело в том, что item является дочерним узлом channel, а дочерних узлов у него 14, поэтому чтобы найти первый item тебе нужно найти его индекс. И если структура XML не будет меняться, то к следующему item можно будет обратиться по последующему индексу.
Находишь индекс первого item так:

Код:
var
  i,k : integer;
  Uzel : IXMLNode;

begin
  XMLDocument1.Active := true;
  XMLDocument1.LoadFromFile(ExtractFilePath(Application.ExeName) + '1.xml');
   k:=-1; //т.к. индексы начинаются с нуля
  Uzel := XMLDocument1.DocumentElement.ChildNodes['channel'];
  for i := 0 to Uzel.ChildNodes.Count-1 do
  begin
    inc(k);
    if Uzel.ChildNodes[i].NodeName = 'item' then break; //нашли индекс первого item
  end;
    Edit1.Text := IntToStr(k);

  XMLDocument1.Active := false;
end;
Здесь k=10 это индекс первого item, значит следующий 11,12 и т.д.
Соответственно ChildNodes['channel'].ChildNodes[10] обращение к первому item
Теперь сделай цикл от индекса первого item к общему количеству item
А как найти сколько всего item ты уже знаешь.

А если ты хочешь обратиться к дочернему узлу item, то так:
Код:
Edit1.Text := XMLDocument1.DocumentElement.ChildNodes['channel'].ChildNodes['item'].ChildNodes[1].Text;

Последний раз редактировалось SolovejK; 12.04.2010 в 01:15.
SolovejK вне форума Ответить с цитированием
Старый 16.10.2011, 11:54   #20
abakar121
 
Регистрация: 27.05.2011
Сообщений: 4
По умолчанию

спасибо вам огромное ))) два дня мучался ... тока здесь нашел ответ на свою задачу )))
abakar121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение и запись параметров в xml BioHEX Общие вопросы Delphi 2 15.01.2010 04:16
парсер XML, не видит XML тэги supercelt PHP 3 02.11.2009 19:18
чтение простейшего XML TaTT DoGG PHP 4 27.08.2009 11:44
Чтение, чтение и еще раз чтение Alex Cones Общие вопросы Delphi 3 07.06.2009 15:28
Чтение XML с помощью XPath Neymexa Общие вопросы .NET 0 14.04.2009 22:43