2010-12-10 12 views
1

ネストされた構造のファミリツリーデータを含むXMLファイルがあります。ネストされたリストに解析したいと思います。PHPをネストされたリストにXMLを構文解析する

私は、次の形式にそれを解析したいただし、次のXMLファイルにロードし、

<?xml version="1.0" encoding="UTF-8"?> 
<indi> 
    <id>id1</id> 
    <fn>Matt</fn> 
    <bday>1919</bday> 
    <dday>2000</dday> 
    <spouse>Evelyn Ross</spouse> 
    <family> 
     <indi> 
     <id>id2</id> 
     <fn>Jane</fn> 
     <bday></bday> 
     <dday></dday> 
     <spouse></spouse> 
     <family> 

     </family> 
    </indi> 
    <indi> 
     <id>id3</id> 
     <fn>Jason</fn> 
     <bday></bday> 
     <dday></dday> 
     <spouse></spouse> 
     <family> 

     </family> 
    </indi> 
    <indi> 
     <id>id4</id> 
     <fn>Samuel</fn> 
     <bday></bday> 
     <dday></dday> 
     <spouse></spouse> 
     <family> 
      <indi> 
       <id>id5</id> 
       <fn>John</fn> 
       <bday></bday> 
       <dday></dday> 
       <spouse></spouse> 
       <family> 

       </family> 
      </indi> 
      <indi> 
       <id>id6</id> 
       <fn>John</fn> 
       <bday></bday> 
       <dday></dday> 
       <spouse></spouse> 
       <family> 

       </family> 
      </indi> 
     </family> 
    </indi> 
</family> 

-であるとして、それを印刷し、次のコード

<?php 
    $doc = new DOMDocument(); 
    $doc->load('armstrong.xml'); 
    echo $doc->saveXML(); 
?> 

を持っています:

<ul> 
    <li> 
    <span class="vcard person" id="id1"> 
      <span class="edit fn">Matt</span> 
     <span class="edit bday">1956</span> 
     <span class="edit dday"></span> 
      <span class="edit spouse">Eunace Fulton</span> 
     </span> 
    <ul> ... List of Family ... </ul> 
    </li> 
</ul> 

私はPHPには新しく、これは信じられないほど単純な問題だと私はお詫びします!本当に何か考えていただければ幸いです。

EDIT

私は今、次の再帰ループを使用していますが、それでも問題

$doc = new DOMDocument(); 
    $doc->load('armstrong.xml'); 

    function outputIndi($indi) { 
     $i = new DOMDocument(); 
     $i = $indi; 

     echo '<li>'; 

     echo '<span class="edit fn">' . $indi->getElementsByTagName("fn") . '</span>'; // name not a real attribute, must access through DOM 
     echo '<span class="edit bday">' . $indi->getElementsByTagName("bday") . '</span>'; // ditto 
     // ... 

     echo '<ul>'; 
     foreach ($indi->getElementsByTagName("family") as $subIndi) { // again, family not a real attribute 
      outputIndi($subIndi); 
     } 
     echo '</ul>'; 

     echo '</li>'; 
    } 

    outputIndi($doc->documentRoot); 

    ?> 

答えて

1

を持つことはここにあなたのコードです。残りの属性(dday、配偶者)を追加する必要があります

リクルート!あなたが見

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 '<ul>'; 
    $family = $indi->getElementsByTagName('family')->item(0)->childNodes; 
    foreach ($family as $subIndi) { 
     outputIndi($subIndi); 
    } 
    echo '</ul>'; 
    echo '</span>'; 
    echo '</li>'; 
} 

$doc = new DOMDocument(); 
$doc->load('armstrong.xml'); 

outputIndi($doc->documentElement); 

、それは、「INDI」に関するすべての情報を出力<family>のそれぞれの子をループし、その上で自分自身を呼び出します。それは理にかなっていますか?

+0

そうですね、ありがとう!私が現在持っている$ doc変数をoutputIndi()に渡す初期値も同じですか?あなたが名前、bdayなどが本当の属性ではないと言うとき、あなたのコードはgetElementsByTagNameのような何かをする必要があるのでしょうか? –

+0

あまり... '$ doc-> documentRoot'です。そして、そうです、それはちょうど正しい、 'getElementsByTagName'です。 – Jonah

+0

ありがとう、私はこのエラーを受け取りました。 致命的なエラー:/nfs/c05/h03/mnt/74985/domains/chris-armstrong.com/html/の非オブジェクトのgetElementsByTagName()メンバ関数を呼び出します。 gortin/index.php on line 115 –

関連する問題