2012-05-11 3 views
0

누군가가 나를 도와 줄 수 있는지 궁금해합니다.jQuery로 XML 노드 제거

사용자가 업로드 한 이미지 갤러리를 볼 수 있도록 this 페이지를 정리했습니다. UploadedFiles/userid/locationid/image 등 즉 설명 xml 파일에 저장되어있는 이미지에 대한 세부 정보는 실제 이미지와 같은 디렉토리에 files.xml라고 : 초기 업로드시

, 실제 이미지는 다음과 같은 파일 구조에 저장됩니다.

이제 사용자가 이러한 이미지를 삭제할 수 있도록 노력하고 있습니다.

각 이미지 아래에 삭제 아이콘으로, 나는 도움을 받아 들여서 물리적 이미지를 성공적으로 삭제하는 다음을 함께 쓴다.

'삭제 아이콘 온 클릭 이벤트'

<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입니다 남겼하는 방법에 대한 연구의 꽤 많은 일을했습니다. 간단한 튜토리얼을 따라 나는 내 '온 클릭 이벤트'스크립트의 끝에 다음을 추가 : 나는 특정 오류가 발생하지 않지만,

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

불행하게도, 노드는 파일에서 삭제되지 않습니다. 나는 XML에 관해서라면 완전한 초보자이다. 그래서 나는 이것을 너무 단순하게보고있다.

나는 단지 누군가가 이걸 좀 봐 주겠다는 것을 궁금해했고, 내가 잘못 가고있는 곳을 알려 주었다.

많은 감사와 관련

답변

1

자바 스크립트 (JQuery와) 메모리에 XML의 DOM을로드하기 때문에 다음 노드를 삭제할 때 이것은, IT는 메모리의 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을로드 한 다음 노드를 제거하고 다시 저장하십시오. –