2012-05-11 12 views
0

誰かが私に助けてもらえるかどうか疑問に思う。jQueryを使ってXMLノードを削除する

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

のJavaScript(jQueryの)メモリ内のXML DOMをロードするので、その後、ノードを削除する場合これは、 は、それは、メモリ内のXMLドキュメント(オブジェクト)から削除されます。

物理的なXMLファイルからは削除されません。

JSは、サンドボックスブラウザ環境で動作し、システム上のローカルファイルを変更することはできません。 リモートサーバーからxmlをロードしようとしている場合、非常に悪い考えです。

リモートサーバーからのXMLファイルが一時ファイルとしてダウンロードされ、XMLを再度読み込むと、メモリ内DOMが作成され、そこからノードが削除されます。

実際のファイルを変更する場合は、AJAXを使用してサーバーにHTTPリクエストを送信して、物理ファイルと同じ処理を行う必要があります。

UPDATE

チェックこのチュートリアル http://www.phpeveryday.com/articles/PHP-XML-Removing-Node-P415.html

とあなたのdelete.phpでXMLファイルをロードし、それから、対応するノードを削除して、元のファイルに戻し、このXMLを保存しよう上書きされます。

+0

こんにちは@Amogh Talpallikar、私のポストに返信する時間を取ってくれて多くの感謝。私はプログラミングのこの要素に本当に新しいです、私はちょうどあなたが私がどこから始める必要があるか知るために、このことを念頭に置くことができるかどうか疑問に思いました。多くのありがとうとご褒美 – IRHM

+0

xmlファイルからノードを削除するには、delete.phpを使用する必要があります。 物理イメージを削除するたびに、そのノードをXMLから削除する必要があります。 –

+0

PHP XML DOM操作をチェックアウトし、PHPを使用してXML DOMをロードし、そこからノードを削除して元に戻します。 –

関連する問題