웹 사이트의 탐색 바를 변경하는 데 사용되는 XML 파일을 편집하는 PHP 스크립트를 만들려고했습니다. 대부분의 시간이 코드를 실행할 때마다 그러나, 오류의 무리를보고SimpleXML addChild 오류
Notice: Trying to get property of non-object in /Volumes/web/edit/includes/new-page.php on line 96
Warning: Invalid argument supplied for foreach() in /Volumes/web/edit/includes/new-page.php on line 96
Notice: Indirect modification of overloaded element of SimpleXMLElement has no effect in /Volumes/web/edit/includes/new-page.php on line 110
Fatal error: Call to a member function addChild() on a non-object in /Volumes/web/edit/includes/new-page.php on line 113
아래는 내가에 문제가 스크립트의 일부입니다. XML을 처음 접했을 때 좀 이상하거나 이상한 점에 대해 사과드립니다. 특정 요소의 모든 하위 항목을 가져 와서 하나 이상의 하위 항목을 추가하고 사전 순으로 정렬 한 다음 다시 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을 사용하고 있습니다. 어떤 문제에 대한 아이디어가 있습니까?
'$ nxml -> $ parent-> part [$ navpartnum]'을 덤프하려고 했습니까? – Uby
@Uby 줄 $ 110이 나에게'NULL'을 줄 직전에'$ nxml -> $ parent-> part [$ navpartnum]'의 var_dump를 입력하십시오. – HZN
글쎄, 당신이 기대 한 것을 얻지 못하면 코드를 디버그해야합니다. – Uby