Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.01.25;
Скачать: [xml.tar.bz2];

Вниз

Как обойти дерево всех 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
2-1228753709
CodeMaster
2008-12-08 19:28
2009.01.25
Ускоренная реализация


15-1228289254
Sergey13
2008-12-03 10:27
2009.01.25
Проблемы с локальной сетью


2-1228910713
rhammer
2008-12-10 15:05
2009.01.25
OnKeyDown при динамическом TPageControl


2-1228483629
Hadroran
2008-12-05 16:27
2009.01.25
Составление запроса


1-1206987467
Efir
2008-03-31 22:17
2009.01.25
Открыть несколько выбранных файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский