2017-03-02 166 views
1

我是新手我想删除我输入什么值的行,但它不断删除第一行并忽略我键入的内容。感谢您提前寻求帮助帮助将非常感激。在PHP中删除XML节点导致不删除输入值

Try.xml

<?xml version="1.0"?> 
<Person> 
<Student> 
    <id>003</id> 
    <name>k</name> 
    <age>18</age> 
</Student> 

<Student> 
    <id>004</id> 
    <name>q</name> 
    <age>19</age> 
</Student> 

<Student> 
    <id>005</id> 
    <name>a</name> 
    <age>20</age> 
</Student> 

删除表格代码:

<head> 

<title>Delete Record</title> 
</head> 
<body> 
    <form method="post" action="delete.php"> 
     ID to delete:<input name="id" type="text"/><br/> 
     <input type="Submit" value= "Delete Record"> 
    </form> 
    </body> 
</html> 

和delete.php

<?php 

    $xmldoc = new DOMDocument(); 
    $xmldoc->load('try.xml'); 
    $root = $xmldoc->documentElement; 

    $items = $root->getElementsByTagName('Student')->item(0); 
    $old=$root->removeChild($items); 



    $test=$xmldoc->save('try.xml'); 
    if($test) 
     echo "Successfully deleted"; 
    ?> 

    <a href="index.php">Back</a> 

回答

0

你已经在你的代码表明item(0) and removeChild($items)这是什么触发它总是删除第一个值。

+0

谢谢大家帮忙 –

+0

如何删除输入值不是第一个值?有什么建议? –

0

您最能移除父元素中的子元素。

$xmldoc = new DOMDocument(); 
$xmldoc->load('try.xml'); 
$root= $xmldoc->documentElement; 
$data = $root->getElementsByTagName('Student'); 
if($data) { 
    $domElemsToRemove = []; 
    foreach ($data as $domElement) { 

     $domElemsToRemove[] = $domElement; 
    } 
    foreach($domElemsToRemove as $domElement){ 
     $domElement->parentNode->removeChild($domElement); 
    } 


    $xmldoc->save('try.xml'); 
} 

UPDATE由ID:

$xmldoc = new DOMDocument(); 
$xmldoc->load('try.xml'); 
$root= $xmldoc->documentElement; 
$data = $root->getElementsByTagName('Student'); 

$id = (string)@$_POST['id']; 

if($data) { 
    $domElemsToRemove = []; 
    foreach ($data as $domElement) { 

     if($domElement->childNodes->item(1)->textContent == $id) { 
      $domElemsToRemove[] = $domElement; 
     } 
    } 

    foreach($domElemsToRemove as $domElement){ 
     $domElement->parentNode->removeChild($domElement); 
    } 


    $xmldoc->save('try.xml'); 
} 
+0

嗨,谢谢你我尝试了你的建议,但它仍然删除了第一行谢谢 –

+0

@CladzAika,请添加try.xml –

+0

非常感谢mych我非常感谢你的帮助,但是当我尝试它时,它给了我这个错误Catchable致命错误:传递给DOMNode :: removeChild()的参数1必须是DOMNode的一个实例,DOMNodeList的实例在第8行的C:\ wamp64 \ www \ act4 \ delete.php中给出。 –