0

私は完全に機能し、正しく表示されているxmlファイルを持っています。今、簡単にすばやく効率的に更新できるphpプログラムを作成しています。これが私のphpスクリプトです。私の問題: 現在各セットに 1 つのレコードしか表示されず、レコード全体が表示されません。私のphpの下には、xmlファイルの小さなサンプルがあります。ありがとう!ここにサンプルがありますhttp://codepad.viper-7.com/7RznW7

<?php 
$doc = new DOMDocument(); 
$doc->load( 'menu-1a.xml' ); 


$allmenu = $doc->getElementsByTagName( "menu" ); 
foreach( $allmenu as $themenu ) 
    {
    $head = $themenu->getElementsByTagName( "menuhead" ); 
    $menuhead = $head->item(0)->nodeValue; 

            $menunames = $themenu->getElementsByTagName( "menuname" ); 
            $menuname = $menunames->item(0)->nodeValue; 

            $desc= $themenu->getElementsByTagName( "menudesc" ); 
            $menudesc= $desc->item(0)->nodeValue; 

            $price = $themenu->getElementsByTagName( "price" ); 
            $price = $price->item(0)->nodeValue; 

            $info2 = $themenu->getElementsByTagName( "price2des" ); 
            $price2des = $info2->item(0)->nodeValue; 

            $cost2 = $themenu->getElementsByTagName( "price2" ); 
            $price2 = $cost2->item(0)->nodeValue; 

            echo " <h3>$menuhead</h3><b>$menuname - $menudesc - $price -     $price2des - $price2 \n</b><br>";

    }
?>

--XMLファイル--

<main>
    <menu id="appet">
    <menuhead>
    Appetizers
    </menuhead>
    <menuitem>
        <menuname>
        Cheese Stick
        </menuname>
        <menudesc>
        (6 Sticks)
        </menudesc>
        <price>
        $7
        </price>
        <price2des>
        </price2des>
        <price2>
        </price2>
    </menuitem>

--新しいコード! WORKS -- load( 'menu-1a.xml' );

$allmenu = $doc->getElementsByTagName( "menu" ); 
foreach( $allmenu as $themenu ) {
$head = $themenu->getElementsByTagName( "menuhead" ); 
$menuhead = $head->item(0)->nodeValue; 
print "$menuhead";
foreach ($themenu->getElementsByTagName('menuitem') as $menuitem) {
    $menuname = $menuitem->getElementsByTagName( "menuname" )->item(0)->nodeValue;
    $menudesc = $menuitem->getElementsByTagName( "menudesc" )->item(0)->nodeValue;
    $price = $menuitem->getElementsByTagName( "price" )->item(0)->nodeValue;
    $price2des = $menuitem->getElementsByTagName( "price2des" )->item(0)->nodeValue;
    $price2 = $menuitem->getElementsByTagName( "price2" )->item(0)->nodeValue;
    print "<b>$menuname - $menudesc - $price -     $price2des - $price2 \n</b><br>";
    }
}
?>
4

2 に答える 2

1

<menuitem>「メニュー」ループ内で s もループし、個人<menuitem>の子ノードで賞品などを検索します。このようなもの:

foreach( $allmenu as $themenu ) {
    $head = $themenu->getElementsByTagName( "menuhead" ); 
    $menuhead = $head->item(0)->nodeValue; 
    print $menuhead;
    foreach ($themenu->getElementsByTagName('menuitem') as $menuitem) {
        $menuname = $menuitem->getElementsByTagName( "menuname" )->item(0)->nodeValue;
        // ... the others
        print <b>$menuname - $menudesc - $price -     $price2des - $price2 \n</b><br>";
    }
于 2012-11-02T15:15:22.983 に答える
0

コードをそのように記述したため、セクションごとに 1 つのエントリのみが表示されます。

のように、常に最初の要素のみにアクセスします$menunames->item(0)

代わりに、最初の子要素だけでなく、すべての子要素にアクセスしてそれらを出力すると、問題は解決します。

を参照DOMElement::getElementsByTagNameしてください。これを行う方法の例が含まれています。

于 2012-11-02T15:15:04.893 に答える