ilkz
Новичок
Обход XML-дерева. Запутался...
Всем привет!
А у нас, тпа, солнышко на улице!
К делу. Заморочился написать функцию для построения дерева-массива на основе XML-дерева. Что есть:
XML-файл примерно такого содержания:
Функция, ессно, рекурсивна. Вот ее код:
Вызывается так:
Но. Все бы ничего, да возникла проблема, которая меня просто выводит из себя! Вот она. Каким образом можно определить, что ВЕТВЬ дерева, например comment, является потомком узла comments? Че-то не втыкаю...
Может, у кого есть такая процедурка?
Спасибо за внимание!
Всем привет!
А у нас, тпа, солнышко на улице!

К делу. Заморочился написать функцию для построения дерева-массива на основе XML-дерева. Что есть:
XML-файл примерно такого содержания:
PHP:
<?xml version="1.0" encoding="windows-1251"?>
<essence id="ESSENCE_ID">
<title>TITLE</title>
<date>DATE</date>
<source url="SOURCE_URL">SOURCE</source>
<icon width="ICON_WIDTH" height="ICON_HEIGHT" url="ICON_URL"/>
<description>DESCRIPTION</description>
<data>DATA</data>
<comments>
<comment id="COMMENT_ID">
<name url="NAME_URL">COMMENT_NAME</name>
<date>COMMENT_DATE</date>
<text>COMMENT_TEXT</text>
</comment>
</comments>
</essence>
PHP:
function walkTree($node, $result, $prevnode=NULL){
for($i=0;$i < $node->childNodes->length;$i++){
$newnode=$node->childNodes->item($i);
if($newnode->nodeType==XML_ELEMENT_NODE && $newnode->childNodes->length > 0){
echo $newnode->nodeName;
walkTree($newnode,$result, $node);
}
elseif($newnode->nodeType==XML_TEXT_NODE){
if(trim($newnode->nodeValue)!="") echo "=".$newnode->nodeValue." (parent_node=".$prevnode->nodeName.")\n";
}
elseif($newnode->childNodes->length == 0){
echo $newnode->nodeName." (parent_node=".$node->nodeName.")\n";
}
}
}
PHP:
$xmlfile="essence.xml";
$xml = new DOMDocument('1.0', 'windows-1251');
$xml->load($xmlfile);
$root=$xml->getElementsByTagName("essence")->item(0);
$result=array();
echo "<pre>";
walkTree($root, $result);
echo "</pre>";
Может, у кого есть такая процедурка?
Спасибо за внимание!