我正在尝试从xml中删除子节点.
我的脚本正在工作..但它删除了几个孩子……而不仅仅是我要删除的那个…
你能看看并告诉我我的问题是什么吗?
XML文件:
3
2
1
delete.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");
?>
解决方法:
获取要删除的节点.在它的parentNode上调用removeChild(),例如
$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();
将删除 < id>的元素具有存储在$id中的值的子节点.
标签:php,xml
来源: https://codeday.me/bug/20191003/1848050.html