0

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

我整理了这个页面,允许用户查看他们上传的图片库。

初始上传时,物理图像保存在以下文件结构中: UploadedFiles/userid/locationid/image图像的详细信息(即描述等)保存在files.xml与物理图像位于同一目录中的 xml 文件中。

我现在正在努力让用户能够删除这些图像。

通过每个图像下方的删除图标,我承认在一些帮助下,将以下内容组合在一起,成功删除了物理图像。

'删除图标 Onclick 事件'

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

原来的'delete.php'

<?php

if (!empty($_POST)) {
$image = $_POST['image'];

if (file_exists($image)) {
unlink($image);
} 
}
?>

更新了'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){ 
$attrValue = $domElement->getAttribute('file_name'); 
if ($attrValue == 'image') { 
$nodeToRemove = $domElement;
} 
} 

if ($nodeToRemove != null) 
$thedocument->removeChild($nodeToRemove); 

echo $doc->saveXML(); 
?> 

我遇到的问题是从 xml 文件中删除 xml 节点。我在下面提供了 XML 文件的摘录。

  <?xml version="1.0" encoding="utf-8" ?> 
- <files>
  <file name="stag.jpg" source="stag.jpg" size="21341" originalname="stag.jpg" description="No description provided" userid="1" locationid="1" /> 
  </files>

我已经对如何解决这个问题进行了大量研究,发现 jQuery 有它自己的命令,即jQuery.remove我认为可以删除节点。按照简短的教程,我在“Onclick Event”脚本的末尾添加了以下内容:

var doc = $(files.xml);
doc.find('file_name:src').remove();

不幸的是,虽然我没有收到特定错误,但该节点并未从文件中删除。当谈到 XML 时,我是一个完整的初学者,所以也许我看得太简单了。

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

非常感谢和问候

4

1 回答 1

1

这是因为 JavaScript(JQuery)将 XML DOM 加载到内存中,然后当您删除节点时,它会从内存中的 xml 文档(对象)中删除。

它不会从物理 XML 文件中删除。

JS 在沙盒浏览器环境中运行,无法更改系统上的本地文件。如果您尝试从远程服务器加载 xml,那么这是一个非常糟糕的主意。

来自远程服务器的 XML 文件被下载为临时文件,然后当您再次加载 XML 时,会创建内存中的 DOM 并从中删除节点。

因此,如果您想要更改实际文件,您将需要使用 AJAX 并向您的服务器发送一些 HTTP 请求以对物理文件执行相同的操作。

更新

查看本教程 http://www.phpeveryday.com/articles/PHP-XML-Removing-Node-P415.html

并尝试在您的 delete.php 中加载 xml 文件并从中删除相应的节点,然后将此 xml 保存回将被覆盖的原始文件。

于 2012-05-11T13:44:24.010 回答