Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.25;
Скачать: CL | DM;

Вниз

Как обойти дерево всех IXMLNode элементов?   Найти похожие ветки 

 
Алексей121   (2008-12-12 12:49) [0]

Есть дерево в виде XML документа. Мне нужно у какого-нибудь нода просмотреть все его элементы на всех уровнях вложенности.
Есть ли стандартные методы?
Делаю так (метод из итератора):

CurrentNode: IXMLNode;
...
procedure TaxXMLNodeIterator.Next;
begin
 if CurrentNode = nil then
    raise ExceptClass.Create("Вызову Next должна предшедствовать проверка на not IsDone");

 if CurrentNode.ChildNodes.Count > 0 then
   CurrentNode := CurrentNode.ChildNodes[0]
 else
 if CurrentNode.NextSibling <> nil then
   CurrentNode := CurrentNode.NextSibling
 else
 if CurrentNode.ParentNode.NextSibling <> nil then
   CurrentNode := CurrentNode.ParentNode.NextSibling
 else
   CurrentNode := nil;

end;


Этот алгоритм неправильный.


 
clickmaker ©   (2008-12-12 13:01) [1]

> все его элементы на всех уровнях вложенности

рекурсивно?


 
int64   (2008-12-12 13:08) [2]

Да как угодно. Нужно, чтобы метод Next переводил CurrentNode на следующий нод


 
clickmaker ©   (2008-12-12 13:14) [3]

а он не переводит?


 
int64   (2008-12-12 13:28) [4]


> а он не переводит?

Только, если дополнить следующим чудом:

> else
>  if CurrentNode.ParentNode.NextSibling <> nil then
>    CurrentNode := CurrentNode.ParentNode.NextSibling
> else
>  if CurrentNode.ParentNode.ParentNode.NextSibling <> nil
> then
>    CurrentNode := CurrentNode.ParentNode.ParentNode.NextSibling
> else
>  if CurrentNode.ParentNode.ParentNode.ParentNode.NextSibling
> <> nil then
>    CurrentNode := CurrentNode.ParentNode.ParentNode.ParentNode.
> NextSibling
> ...


 
int64   (2008-12-12 13:47) [5]

ANode := CurrentNode;

while (ANode.ParentNode <> nil) and (ANode.ParentNode.NextSibling = nil)
ANode := ANode.ParentNode;
if ANode.ParentNode = nil then
  CurrentNode:= nil
else
  CurrentNode := ANode.ParentNode.NextSibling



Страницы: 1 вся ветка

Текущий архив: 2009.01.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
15-1227781745
Vudu
2008-11-27 13:29
2009.01.25
Пользователей обяжут проверять лицензионность используемых програ


15-1227947603
Slider007
2008-11-29 11:33
2009.01.25
С днем рождения ! 29 ноября 2008 суббота


15-1227708896
Поросенок Винни-Пух
2008-11-26 17:14
2009.01.25
Богатства сомали


2-1229192725
Михаил
2008-12-13 21:25
2009.01.25
StringGrid


4-1203283452
Galiaf
2008-02-18 00:24
2009.01.25
Перехват сообщений самодельным окном.