Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Fatal error: Uncaught exception 'DOMException' (http://forum.oszone.net/showthread.php?t=103184)

rus-4-ever 19-03-2008 16:14 763672

Fatal error: Uncaught exception 'DOMException'
 
Подскажите,
Вот такая ошибка вылезает при удалении ветки из ХМЛ...
Цитата:

Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in /home/www/docs/test1/change-xml.php:96 Stack trace: #0 /home/www/docs/test1/change-xml.php(96): DOMNode->removeChild(Object(DOMElement)) #1 {main} thrown in /home/www/docs/test1/change-xml.php on line 96
Код:
Цитата:

if ($act=='del') // delete
{
$doc->load('test.xml');

$xpath = new DOMXPath($doc);

$query = "//cat[@id='".$_POST['id']."']/descendant-or-self::*";

$entries = $xpath->query($query);

foreach ($entries as $entry) {
$arr[]=$entry->getAttribute('id');
}
foreach ($arr as $node) {
echo $node.'<br>';
}

$entry=$entries->item(0);

$child = $doc->documentElement;

$child->removeChild($entry);

$doc->save('test.xml');
}
2 дня назад код работал!!! видимо это связано с изменением файла ХМЛ...

Цитата:

<cat id="0">
<cat name="asd" id="29"/>
<cat name="&#x444;&#x44B;&#x432;&#x430;" id="54"/>
<cat name="&#x41A;&#x43E;&#x43C;&#x435;&#x442;&#x44B;" id="55">
<cat name="asd1" id="56">
<cat name="asd" id="57"/>
</cat>
</cat>
</cat>
С чем это связано? и как предотвратить появление этой ошибки?

bruder 20-03-2008 01:00 763995

привет. Я с xpath никогда не работал, однако все новое для меня интересно. Я сразу заметил что находятся нужные элементы правильно, главное удалить правильно. Покопавшись немного сотворил следующее:

Код:

//-------------Переделал твой пост на мой get так что внимательней
$act = $_GET["act"];

$doc = new DOMDocument;

// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;

// source
$doc->Load('test.xml');

if ($act=='del') // delete
{
$doc->load('test.xml');

$xpath = new DOMXPath($doc);

//-------------тут маленько исправил
$query = "//cat[@id=".$_GET['id']."]";

$entries = $xpath->query($query);

foreach ($entries as $entry) {
echo "***-";
echo $entry->getAttribute('id');
echo "+***";
if($entry->getAttribute('id')==$_GET['id'])       
      //----------------вот это решение
        $entry->parentNode->removeChild($entry);
}
$doc->save('test2.xml');
}

ты правильно нашел ноду а удалить ее надо к предку обращаться и убить саму себя :)

rus-4-ever 20-03-2008 01:21 764004

Спасибо!!!
Ошибка как раз была в том что я использовал

Цитата:

$entry=$entries->item(0);

$child = $doc->documentElement;

$child->removeChild($entry);
А надо
Цитата:

$entry=$entries->item(0);

$child = $entry->parentNode;

$child->removeChild($entry);


Время: 19:54.

Время: 19:54.
© OSzone.net 2001-