簡體   English   中英

用php刪除xml文件中的子節點

[英]delete child node in xml file with 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");

?>

獲取要刪除的節點。 在其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>子節點刪除<record>元素。

在Codepad上運行代碼

更多示例: 從xml中刪除元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM