XML файл с бесконечным числом подуровней
От: Moondev  
Дата: 21.07.04 14:31
Оценка:
Не пойму как парсить XML файл с бесконечным числом подуровней например как вот у этом форуме :
http://forum.rusf.ru/nul-t/

если это делать во вложенных циклах то как знать сколько вообще уровней вглубь существует у каждой темы и подтемы?

если не совсем понятно, что именно нужно нувот например я могу определить сколько всего основных узлов:
totalMenus = obj.selectNodes("data/MenuSection").length
и открыть цикл и вывести их всех

но потом, чтобы определить сколько подузлов у узла мне надо сделать тоже самое внутри цикла после вывода основного узла:
totalSUBMenus = obj.selectNodes("data/MenuSection/SubMenuSection").length

и открыть новый цикл если не ноль, и вывсести подузлы.

Это все хорошо если подуровней лимитированное количество — 5, 10 и.т.д.

А если их БЕСКОНЕЧНОЕ количество?

как идти вглубь "пока не упрешься"?

чувствую что это очень просто но не могу додуматься
Re: XML файл с бесконечным числом подуровней
От: den123 Израиль http://den123.smugmug.com
Дата: 21.07.04 14:38
Оценка: 3 (1) +2
Здравствуйте, Moondev, Вы писали:

M>Не пойму как парсить XML файл с бесконечным числом подуровней например как вот у этом форуме :

M>http://forum.rusf.ru/nul-t/

M>если это делать во вложенных циклах то как знать сколько вообще уровней вглубь существует у каждой темы и подтемы?


M>если не совсем понятно, что именно нужно нувот например я могу определить сколько всего основных узлов:

M>totalMenus = obj.selectNodes("data/MenuSection").length
M>и открыть цикл и вывести их всех

M>но потом, чтобы определить сколько подузлов у узла мне надо сделать тоже самое внутри цикла после вывода основного узла:

M>totalSUBMenus = obj.selectNodes("data/MenuSection/SubMenuSection").length

M>и открыть новый цикл если не ноль, и вывсести подузлы.


M>Это все хорошо если подуровней лимитированное количество — 5, 10 и.т.д.


M>А если их БЕСКОНЕЧНОЕ количество?


M>как идти вглубь "пока не упрешься"?


M>чувствую что это очень просто но не могу додуматься


Use recursive call
WBR — Yuriy
Re: XML файл с бесконечным числом подуровней
От: Slava_L Россия  
Дата: 21.07.04 18:33
Оценка:
Здравствуйте, Moondev, Вы писали:

M>Не пойму как парсить XML файл с бесконечным числом подуровней например как вот у этом форуме :

M>http://forum.rusf.ru/nul-t/

M>если это делать во вложенных циклах то как знать сколько вообще уровней вглубь существует у каждой темы и подтемы?


M>если не совсем понятно, что именно нужно нувот например я могу определить сколько всего основных узлов:

M>totalMenus = obj.selectNodes("data/MenuSection").length
M>и открыть цикл и вывести их всех

M>но потом, чтобы определить сколько подузлов у узла мне надо сделать тоже самое внутри цикла после вывода основного узла:

M>totalSUBMenus = obj.selectNodes("data/MenuSection/SubMenuSection").length

M>и открыть новый цикл если не ноль, и вывсести подузлы.


M>Это все хорошо если подуровней лимитированное количество — 5, 10 и.т.д.


M>А если их БЕСКОНЕЧНОЕ количество?


M>как идти вглубь "пока не упрешься"?


M>чувствую что это очень просто но не могу додуматься


В качестве примера можно так (файл traverse.js):
if (WScript.Arguments.length != 1) 
{
    WScript.echo("usage: traverse.js filename");
    WScript.Quit(1);
}
var fname = WScript.Arguments.Item(0);
var dom = new ActiveXObject("Msxml2.DOMDocument");

function traverseTree(node) 
{
    // process node here
    WScript.echo("element: name=" + node.nodeName + ", type=" + node.nodeType, ", text=" + node.text);
      
    if (node.hasChildNodes) 
    {
        for (var i=0; i<node.childNodes.length; i++)
        {
            var child = node.childNodes.item(i);
            traverseTree(child);
        }
    }
}

if (dom.load(fname)) 
{
    traverseTree(dom.documentElement);   
}
else
{
    WScript.echo("### error loading " + fname + ": " + dom.parseError.reason);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.