我的xml文件工作正常且显示正确,现在我正在创建一个php程序,可以轻松快速有效地更新它,这是我的PHP脚本。我的问题:它在每组中只显示一条记录,它没有显示整个记录。我的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>
- 新代码!工作 - 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>";
}
}
?>
答案 0 :(得分:1)
您想在“菜单”循环中循环遍历<menuitem>
,并搜索单个<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>";
}
答案 1 :(得分:0)
每个部分只显示一个条目,因为您已经编写了代码。
您总是仅访问第一个元素,例如$menunames->item(0)
。
如果你改为访问所有子元素 - 不仅是第一个 - 并输出它们,你的问题就解决了。
请参阅DOMElement::getElementsByTagName
,其中包含如何执行此操作的示例。