Neden benim özyinelemeli döngü çok çocuk yaratıyor?

0 Cevap php

Ben, bir iç içe liste oluşturmak için bir XML belge üzerinden ayrıştırmak için bir PHP özyinelemeli döngü kullanarak ediyorum ancak nedense döngü kırılır ve listenin içindeki unsurların yanı sıra, boş elemanlarının çiftleri oluşturarak.

Aşağıdaki gibi XML (aile ağacı verileri listesi) yapılandırılmıştır:

        <?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>

Ve burada bir iç içe ul oluşturmak için bunun üzerinden döngüler sonra XML dosyasını yükler benim PHP döngü, bulunuyor:

<?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);

    ?>

EDIT here's the desired outcome (nested lists, with ul's signifying families and li's signifying individuals)

<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>

Sen http://chris-armstrong.com/gortin de çıkışını görebilirsiniz. Ben yanlış gidiyorum herhangi bir fikir? Ben $ subIndi değeri ile ilgili bir şey olduğunu düşünüyorum, ama her zaman denemek ve ben bir hata alıyorum bunu değiştirmek. Gerçekten herhangi bir yardım takdir ediyorum!

0 Cevap