Я пытаюсь удалить дочерний узел из 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