Php 删除XML子节点

Php 删除XML子节点,php,xml,xmldom,Php,Xml,Xmldom,不知是否有人能帮助我 我使用页面允许用户查看他们上传的图片库 上传后,图像保存在此文件路径UploadedFiles/userid/locationid/image中,图像的详细信息,即名称、描述等保存在名为files.XML的XML文件中,该文件与图像位于同一目录中。以下是这方面的摘录: <?xml version="1.0" encoding="utf-8" ?> - <files> <file name="AC-0003749-Clark_145520.

不知是否有人能帮助我

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

上传后,图像保存在此文件路径
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>

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

图标点击事件

<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>

Galleria.ready(函数(){
这是。$('thumblink')。单击();
$(“.galleria image”)。附加(
""); 
$(“.btn delete”).live(“单击”,函数(){
var img=$(this).closest(“.galleria image”).find(“img”);
//发送AJAX请求
$.ajax({
url:'delete.php',
键入:“post”,
数据:{image:img.attr('src')},
成功:函数(){
警报('删除图像…');
img.parent().fadeOut('slow');
}
});
返回false;
});
});
delete.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();
}
if(!empty($\u POST)){
$image=$_POST['image'];
如果(文件_存在($image)){
取消链接($image);
}
$doc=新文档;
$doc->load('files.xml');
//迭代所有名为
$list=$doc->getElementsByTagName('file');
foreach($domElement){
//检查属性“source”是否等于$image
如果($doElement->getAttribute('source')==$image){
//删除节点
$DOMELENT->parentNode->removeChild($DOMELENT);
} 
}
echo$doc->saveXML();
}

要删除使用
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();
}
if(!empty($\u POST)){
$image=$_POST['image'];
如果(文件_存在($image)){
取消链接($image);
}
$doc=新文档;
$doc->load('files.xml');
//迭代所有名为
$list=$doc->getElementsByTagName('file');
foreach($domElement){
//检查属性“source”是否等于$image
如果($doElement->getAttribute('source')==$image){
//删除节点
$DOMELENT->parentNode->removeChild($DOMELENT);
} 
}
echo$doc->saveXML();
}

Hi@Jack,感谢您抽出时间回复我的帖子。请原谅我的提问,请您详细说明我应该删除哪些行以替换您的建议。正如我所说,我对处理XML文件非常陌生。向您致以亲切的问候和感谢,非常感谢您在这方面的持续帮助。不幸的是,我确信是我做错了什么,我无法从XML文件中删除节点。我已经用修改后的代码更新了我原来的帖子。我只是想知道你是否可以看看这个,看看我哪里做错了。衷心感谢regards@IRHM再次更新了答案,我应该提醒您,基于发布的变量(如
$image
)执行
取消链接()
,而不检查其值有点危险。。。读者练习。你好,杰克,衷心感谢你在这方面的帮助。我注意到了你的警告。我确实打算在整理完节点删除后,签入该值。我尝试了这段代码,但不幸的是它没有从XML文件中删除相关节点。请允许我与您确认一下,'delete.php'文件是否需要与XML文件位于同一位置?只是一个想法。谢谢你regards@IRHM在同一个文件夹中是的,否则它将不知道从何处加载“files.xml”。。。顺便说一句,我建议添加“错误报告(-1)”;ini_设置(“显示错误”、“打开”);在您的脚本顶部。嗨@Jack,感谢您抽出时间回复我的帖子。请原谅我的提问,请您详细说明我应该删除哪些行以替换您的建议。正如我所说,我对处理XML文件非常陌生。向您致以亲切的问候和感谢,非常感谢您在这方面的持续帮助。不幸的是,我确信是我做错了什么,我无法从XML文件中删除节点。我已经用修改后的代码更新了我原来的帖子。我只是想知道你是否可以看看这个,看看我哪里做错了。衷心感谢regards@IRHM再次更新了答案,我应该提醒您,基于发布的变量(如
$image
)执行
取消链接()
,而不检查其值有点危险。。。读者练习。你好,杰克,衷心感谢你在这方面的帮助。我注意到了你的警告。我确实打算在整理完节点删除后,签入该值。我尝试了这段代码,但不幸的是它没有从XML文件中删除相关节点。请允许我与您确认一下,'delete.php'文件是否需要与XML文件位于同一位置?只是一个想法。谢谢你,谢谢你