удалить дочерний узел в XML-файле с помощью php

Я пытаюсь удалить дочерний узел из xml. мой скрипт работает … но он удаляет несколько дочерних элементов … и не только тот, который я хочу удалить …

можете ли вы посмотреть и рассказать мне, в чем моя проблема?

XML-файл:

<?xml version="1.0" encoding="UTF-8" ?> <events> <record> <id>3</id> </record> <record> <id>2</id> </record> <record> <id>1</id> </record> </events> 

Файл delete.php:

 <?php header("Content-type: text/html; charset=utf-8"); $record = array( 'id' => $_POST['id'], ); $users = new DOMDocument(); $users->load("xmp.xml"); $suser = simplexml_load_file("xmp.xml"); $count = 0; $user = $users->getElementsByTagName("record"); foreach($user as $value) { $tasks = $value->getElementsByTagName("id"); $task = $tasks->item(0)->nodeValue; if ($task == $record["id"]) { $users->documentElement->removeChild($users->documentElement->childNodes->item($count)); } $count++; } $users->save("xmp.xml"); ?> 

Извлеките узел, который хотите удалить. Вызовите removeChild() на parentNode , например

 $node->parentNode->removeChild($node); 

В обозревателе вы можете сделать это с меньшим количеством кода при использовании XPath:

 $id = /* some integer value */ $dom = new DOMDocument; $dom->load('file.xml'); $xpath = new DOMXPath($dom); $query = sprintf('/events/record[./id = "%d"]', $id); foreach($xpath->query($query) as $record) { $record->parentNode->removeChild($record); } echo $dom->saveXml(); 

удалит элемент <record> с дочерним узлом <id> имеющим значение, хранящееся в $id .

Выполнить код на Codepad .

Дополнительные примеры: удалить элемент из xml