www.webdeveloper.com
Results 1 to 4 of 4

Thread: [RESOLVED] Delete Node In XML File

Hybrid View

  1. #1
    Join Date
    Mar 2012
    Posts
    5

    resolved [RESOLVED] Delete Node In XML File

    I wonder whether someone may be able to help please.

    I've put together this page http://www.mapmyfinds.co.uk/development/deletetest.php which allows users to view a gallery of their uploaded images.

    Upon upload, each physical image is saved in the following file structure:
    UploadedFiles/userid/locationid/image
    The image details i.e description, filename etc are saved in an XML file called 'files.xml' which is in the same location as the images. An extract of which can be seen below.

    Code:
     <?xml version="1.0" encoding="utf-8" ?> 
    - <files>
      <file name="_47061196_greatbritainjpg.jpg" source="_47061196_greatbritainjpg.jpg" size="227505" originalname="_47061196_greatbritainjpg.jpg" description="No description provided" userid="1" locationid="1" /> 
      <file name="stag.jpg" source="stag.jpg" size="21341" originalname="stag.jpg" description="No description provided" userid="1" locationid="1" /> 
      </files>
    You will see under each image there is an icon which allows the user to delete the image. This done via the following:

    Icon Click Event

    Code:
    <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 Code:
    <?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(); 
    ?>
    With this, I can succesfully delete the physical image, but what I'm having great difficulty in doing is deleting the corresponding child node in the XML file.

    I really quite new to dealing with XML but I've been working on this for weeks now, and I'm still no further forward.

    I just wondered whether someone could perhaps have a look at this please and let me know where I'm going wrong.

    Many thanks and regards

  2. #2
    Join Date
    Oct 2008
    Location
    U.S.
    Posts
    726
    A few things jump out at me here. First, in the xml snippet you provided I do not see anywhere that you have an attribute by the name of 'file_name' which you are looking for in your php file:
    $attrValue = $domElement->getAttribute('file_name');
    So I believe you intend that to be:
    $attrValue = $domElement->getAttribute('name');
    Then the next thing is this:
    if ($attrValue == 'image') {
    $nodeToRemove = $domElement;
    }
    Rather than 'image' I believe you intend that to be $image

  3. #3
    Join Date
    Mar 2012
    Posts
    5
    Hi, thank you very much for taking the time to respond to my post, it is greatly appreciated.

    You can probably tell, that I'm a complete beginner when it comes to XML.

    I've made the changes you suggested, but unfortunately although the deletion of the physical image still works, I'm unable to get the corresponding node to be deleted.

    I just wondered whether it would be at all possible for you to offer a little more guidance please.

    Many thanks and regards

  4. #4
    Join Date
    Mar 2012
    Posts
    5
    Hi,

    Realising that the 'image' value carried forward the whole file path rather than just the file name of the image, I had to first break the file path down, then open the file and make the necessary changes to the XML file.

    My solution is as follows:

    PHP Code:
    <?php session_start(); 

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

    if (
    file_exists($originalimage)) {   
    unlink($originalimage);   
    }   
    }   

    $path_parts pathinfo($originalimage);
    $dir $path_parts['dirname']; 
    $basename $path_parts['basename'];
    ?>

    <?php

    $newimage 
    $basename;

    $dom = new DomDocument();
    $dom->load('UploadedFiles/' $_SESSION['userid'] . '/' $_SESSION['locationid'] . '/' 'files.xml'); 

    $root $dom->documentElement;

    $images $root->getElementsByTagName("file");
    $length $images->length;

    //Iterate backwards by decrementing the loop counter 
    for ($i=$length-1;$i>=0;$i--)
    {
    $p $images->item($i); 
    $pid $p->getAttribute("name");

    if (
    $pid == $newimage)

    $parent $p->parentNode;
    $parent->removeChild($p); 
    }
    }

    $dom->save('UploadedFiles/' $_SESSION['userid'] . '/' $_SESSION['locationid'] . '/' 'files.xml'); 
    ?>

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles