Web サイトのナビゲーション バーを変更するために使用される XML ファイルを編集する PHP スクリプトを作成しようとしています。ただし、ほとんどの場合、このコードを実行すると、一連のエラーが報告されます。
注意: 96 行目で /Volumes/web/edit/includes/new-page.php の非オブジェクトのプロパティを取得しようとしています
警告: 96 行目の /Volumes/web/edit/includes/new-page.php の foreach() に無効な引数が指定されています
注意: SimpleXMLElement のオーバーロードされた要素を間接的に変更しても、/Volumes/web/edit/includes/new-page.php の 110 行目では効果がありません
致命的なエラー: 113 行目の /Volumes/web/edit/includes/new-page.php の非オブジェクトに対するメンバー関数 addChild() の呼び出し
以下は、私が問題を抱えているスクリプトの一部です。私は XML に慣れていないので、少し面倒だったり奇妙だったりしたら申し訳ありません。特定の要素のすべての子を取得し、子をもう 1 つ追加し、アルファベット順に並べ替えて、XML ファイルに戻すだけです。
$nxml = simplexml_load_file($xmlfile) or die ("Unable to load XML file!");
$items = array();
foreach ($nxml->$parent->part[$navpartnum]->item as $item1) { //Line 96
$items[] .= "{$item1->title} - {$item1->link}";
}
$items[] .= "{$title} - {$navpointer}";
sort($items);
$navparts = array();
foreach ( $items as $item2 ) {
$itemparts = explode(" - ",$item2);
$navparts[$itemparts[0]] = $itemparts[1];
}
unset($nxml->$parent->part[$navpartnum]->item); //Line 110
foreach( $navparts as $akey => $avalue ) {
$makeitem = $nxml->$parent->part[$navpartnum]->addChild('item'); //Line 113
$makeitem->addChild('title',$akey);
$makeitem->addChild('link',$avalue);
}
file_put_contents($xmlfile, $nxml->asXML());
上記のスクリプトが取得する入力の例を次に示します。
$xmlfile = "/Volumes/web/nav.xml";
$navpartnum = 0;
$parent = "about";
$title = "Contact";
$navpointer = "/about/contact/";
最後に、XML ファイルのサンプルを示します。
<?xml version="1.0" encoding="utf-8"?>
<navbar>
<about parts="2">
<part num="1">
<item>
<title>Overview</title>
<link>/about/overview/</link>
</item>
</part>
<part num="2">
<item>
<title>Activities and Athletics</title>
<link>/about/activities_and_athletics/</link>
</item>
</part>
</about>
</navbar>
このスクリプトは数回機能しましたが、今は前に言ったエラーが表示されるだけです。また、PHP 5.4.10 を使用しています。何が問題なのかについてのアイデアはありますか?