删除 XML 子节点


Remove XML Child Node

我想知道是否有人可以帮助我。

我使用此页面允许用户查看他们上传的图像的图库。

上传后,图像将保存在此文件路径UploadedFiles/userid/locationid/image中,并且图像的详细信息(即名称,描述等(保存在名为files.xml的XML文件中,该文件与图像位于同一目录中。摘录如下:

<?xml version="1.0" encoding="utf-8" ?> 
- <files>
  <file name="AC-0003749-Clark_145520.jpg" source="AC-0003749-Clark_145520.jpg" size="3873" originalname="AC-0003749-Clark_145520.jpg" description="No description provided" userid="1" locationid="1" /> 
  </files>
图库通过每个图像

下方的图标为用户提供了删除每个图像的功能。这是通过以下代码完成的:

图标单击事件

<script type="text/javascript"> 
        Galleria.ready(function() {
            this.$('thumblink').click();
        $(".galleria-image").append( 
        "<span class='btn-delete ui-icon ui-icon-trash'></span>"); 
        $(".btn-delete").live("click", function(){
        var img = $(this).closest(".galleria-image").find("img"); 
        // send the AJAX request
        $.ajax({
        url : 'delete.php',
        type : 'post',
        data : { image : img.attr('src') },
        success : function(){
        alert('Deleting image... ');
        img.parent().fadeOut('slow');
        }
        });
        return false;
        });
        });
    </script>

删除.php - 修订代码

<?php 
if (!empty($_POST)) { 
$image = $_POST['image']; 
if (file_exists($image)) { 
unlink($image); 
} 
} 
$doc = new DOMDocument; 
$doc->load('files.xml'); 
$thedocument = $doc->documentElement; 
$list = $thedocument->getElementsByTagName('files'); 
$nodeToRemove = null; 
foreach ($list as $domElement){ 
if ($attrValue == '$image') {     $domElement->parentNode->removeChild($domElement); } 
}
if ($nodeToRemove != null) 
$thedocument->removeChild($nodeToRemove); 
echo $doc->saveXML(); 
?> 

删除物理映像工作正常,但我在弄清楚如何删除相关子节点时遇到了很大的困难。虽然我没有收到错误消息,但节点没有被删除。我从这个网站得到了一些关于如何做到这一点的指导,即通过 PHP XML DOM,但说实话,我读得越多,我就越困惑。我似乎无法理解它。

只是想知道是否有人可以看看这个,让我知道我哪里出错了。

非常感谢和亲切的问候

要删除通过getElementsByTagName找到的节点,可以使用以下命令将其删除:

if (!empty($_POST)) { 
    $image = $_POST['image']; 
    if (file_exists($image)) { 
        unlink($image); 
    }
    $doc = new DOMDocument; 
    $doc->load('files.xml');
    // iterate over all tags named <file>
    $list = $doc->getElementsByTagName('file');
    foreach ($list as $domElement) {
        // check whether attribute 'source' equals $image
        if ($domElement->getAttribute('source') == $image) {
            // remove the node
            $domElement->parentNode->removeChild($domElement);
        } 
    }
    echo $doc->saveXML();
}