使用jQuery删除XML节点

时间:2012-05-11 13:28:43

标签: javascript jquery xml delete-row

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

我整理了this页面,该页面允许用户查看其上传图片的图库。

初次上传时,物理图像保存在以下文件结构中: 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事件”脚本的末尾添加了以下内容:

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

不幸的是,虽然我没有收到特定的错误,但是没有从文件中删除该节点。对于XML来说,我是一个完全的初学者,所以也许我太简单地看待这个了。

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

非常感谢和问候

1 个答案:

答案 0 :(得分:1)

这是因为JavaScript(JQuery)在内存中加载XML DOM,然后在删除节点时 它会从内存中的xml doc(对象)中删除。

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

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

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

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

<强>更新

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

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