Форум: "Начинающим";
Текущий архив: 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