2017-06-13 73 views
0

我在PHP中的警告,但我不知道它是什麼 代碼:XML刪除項目在PHP

<?php 
    session_start(); 
    function clearfile(){ 
    $usuarios= simplexml_load_file('../carrito/cart.xml'); 
    $filename='../carrito/cart.xml'; 
    $username = $_SESSION['un']; 
    $length = count($usuarios->carro); 
    foreach ($usuarios->carro as $elemento){ 
     if($elemento->usuario==$username){ 
     for ($i=0; $i < $length; $i++) { 
     if ($usuarios->carro[$i]->usuario==$username) { 
     unset($usuarios->carro[$i]); 
     break; 
    } 
    } 
    file_put_contents($filename,$usuarios->saveXML()); 
    } 
    } 
    } 
    ?> 

XML文件cart.xml是

<?xml version="1.0"?> 
    <info> 
    <carro> 
    <id>4</id> 
    <usuario>Gera</usuario> 
    <producto>Keep Calm</producto> 
    <Size>M</Size> 
    <cantidad>1</cantidad> 
    <precio>130</precio> 
    </carro> 
    <carro> 
    <id>5</id> 
    <usuario>Gera</usuario> 
    <producto>Jaws</producto> 
    <Size>M</Size> 
    <cantidad>1</cantidad> 
    <precio>120</precio> 
    </carro> 
    <carro> 
    <id>7</id> 
    <usuario>alex</usuario> 
    <producto>Gatitos</producto> 
    <Size>M</Size> 
    <cantidad>1</cantidad> 
    <precio>78</precio> 
    </carro> 
    <carro> 
    <id>8</id> 
    <usuario>alex</usuario> 
    <producto>Jaws</producto> 
    <Size>M</Size> 
    <cantidad>1</cantidad> 
    <precio>120</precio> 
    </carro> 
    </info> 

和錯誤是

Warning: clearfile(): Node no longer exists in 
    /opt/lampp/htdocs/Hubble/compra/compra.php on line 8 

這個想法是刪除用戶的所有節點,例如在用戶名alex執行函數clearfile後輸出應該是

<?xml version="1.0"?> 
    <info> 
    <carro> 
    <id>4</id> 
    <usuario>Gera</usuario> 
    <producto>Keep Calm</producto> 
    <Size>M</Size> 
    <cantidad>1</cantidad> 
    <precio>130</precio> 
    </carro> 
    <carro> 
    <id>5</id> 
    <usuario>Gera</usuario> 
    <producto>Jaws</producto> 
    <Size>M</Size> 
    <cantidad>1</cantidad> 
    <precio>120</precio> 
    </carro> 
    </info> 

回答

0

而是使用SimpleXML的,請嘗試使用XPath查找用戶名匹配節點的父節點。

一旦Xpath返回結果,然後遍歷結果上到父節點並刪除該子節點以刪除整個對應的carro節點。

<?php 
session_start(); 

function clearfile() { 

    $filename='../carrito/cart.xml'; 

    $xml = new DOMDocument(); 
    $xml->load($filename); 
    $xpath = new Domxpath($xml); 

    $username = $_SESSION['un']; 
    $elements = $xpath->query("//carro/usuario[text()='".$username."']/.."); 

     if ($elements->length > 0) { 
      foreach ($elements as $node) { 
       $node->parentNode->removeChild($node); 
      } 
     } 
    file_put_contents($filename,$xml->saveXML()); 
    }  

?>