-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
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="фыва" id="54"/>
<cat name="Кометы" 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.
© OSzone.net 2001-