Я использую рекурсивный цикл PHP для анализа XML-документа, чтобы создать вложенный список, однако по какой-то причине цикл прерывается и создается дубликаты элементов в списке, а также пустых элементов.
XML (список данных генеалогического дерева) структурирован следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<family>
<indi>
<id>id1</id>
<fn>Thomas</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
<indi>
<id>id1</id>
<fn>Alexander</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
</family>
</indi>
<indi>
<id>id1</id>
<fn>John</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
<indi>
<id>id1</id>
<fn>George</fn>
<bday></bday>
<dday></dday>
<spouse></spouse>
<family>
</family>
</indi>
</family>
</indi>
</family>
</indi>
</family>
А вот мой цикл PHP, который загружает файл XML, затем перебирает его, чтобы создать вложенный ul:
<?php
function outputIndi($indi) {
echo '<li>';
$id = $indi->getElementsByTagName('id')->item(0)->nodeValue;
echo '<span class="vcard person" id="' . $id . '">';
$fn = $indi->getElementsByTagName('fn')->item(0)->nodeValue;
$bday = $indi->getElementsByTagName('bday')->item(0)->nodeValue;
echo '<span class="edit fn">' . $fn . '</span>';
echo '<span class="edit bday">' . $bday . '</span>';
// ...
echo '</span>';
echo '<ul>';
$family = $indi->getElementsByTagName('family');
foreach ($family as $subIndi) {
outputIndi($subIndi);
}
echo '</ul></li>';
}
$doc = new DOMDocument();
$doc->load('armstrong.xml');
outputIndi($doc);
?>
РЕДАКТИРОВАТЬ вот желаемый результат (вложенные списки, со знаковыми семьями ul и знаковыми личностями li)
<ul>
<li>
<span class="vcard">
<span class="fn">Thomas</span>
<span class="bday"></span>
<span class="dday"></span>
<ul>
... repeat for all ancestors ...
</ul>
<li>
<ul>
Вы можете увидеть результат в http://chris -armstrong.com / gortin .Есть идеи, где я иду не так?Я думаю, что это как-то связано со значением $ subIndi, но каждый раз, когда я пытаюсь изменить его, я получаю сообщение об ошибке.Буду очень признателен за любую помощь!