2015-03-07 3 views
-1

[обновление из-за неоднозначного вопроса] спасибо за указание на это @hakrePHP удалить XML-узел с DOMDocument

У меня есть проблема в том, что с теми, сценарий у меня есть:

  1. или не может удалить XML-узел, я хочу
  2. или удаляет узел, но он не сохранить его файл

я есть THI s XML документ:

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.2"> 
    <Document> 
     <Placemark> 
      <name>Chelsea</name> 
      <Snippet>London</Snippet> 
      <Point> 
       <coordinates>-0.2, 51.2,0.000000</coordinates> 
      </Point> 
      <id>1</id> 
     </Placemark> 
     <Placemark> 
      <name>World</name> 
      <Snippet>Willingdon </Snippet> 
      <Point> 
       <coordinates>-0.2,50.2,0.000000</coordinates> 
      </Point> 
      <id>2</id> 
     </Placemark> 
    </Document> 
</kml> 

и с этим Javascript я называю delete.php:

function send2del(d){ 
      $.ajax({ 
       url : 'delete.php', 
       type : 'POST', 
       data : { what : $(d).data('id') }, 
       success : function(){ 
         $(d).closest('tr').fadeOut('slow'); 
       } 
      }); 
      return false; 
     }; 

и я пытаюсь удалить метку, используя ID, вот мой delete.php:

<?php 
if (isset($_POST['what'])) { 
    $id = $_POST['what']; 
    $doc = new DOMDocument; 
    $doc->load('placemarks.xml'); 

    $shops = $doc->getElementsByTagName('Placemark'); 
    foreach ($shops as $shop) { 
     $ids = $shop->getElementsByTagName('id'); 
     if ($ids->item(0)->nodeValue == $id) { 
      $shop->parentNode->removeChild($shop); 
     } 
    } 
    echo $doc->saveXML(); 
    } 
?> 

Но это не сработает. Я пробовал нам simpleXML, но без успеха. Можете ли вы дать мне несколько рекомендаций по этой проблеме? Или, если вы можете мне помочь с решением simpleXML, я был бы очень благодарен.

+0

Вам нужно отлаживать код. Например. это значение, переданное скрипту PHP и доступное там в том формате, который вы ожидаете от него? Это лучше всего сделать с помощью отладчика шага, такого как xdebug btw., Вы можете заглянуть внутрь программы во время ее запуска и пройти шаг за шагом, глядя на все переменные и как они меняются и т. Д. – hakre

+0

кажется, что он получает параметр что мне нужно, 'foreach ($ stores as $ shop) { $ ids = $ shop-> getElementsByTagName ('id'); if ($ ids-> item (0) -> nodeValue == $ id) { echo "i found it:". $ Shop-> getElementsByTagName ('name') -> item (0) -> nodeValue; } } 'дает мне результат, которого я ожидаю. просто я не знаю, как hot удалить узел метки и сохранить его. – gerpaick

+1

Вам нужно использовать метод 'save', а не' saveXML'. См. Http://php.net/domdocument.save. И кстати, это было совершенно непонятно мне из вашего вопроса, у меня создалось впечатление, что элемент не был удален из документа, но вы просто обеспокоены сохранением, не так ли? – hakre

ответ

0

Я проверил ваш код. Он удаляет элемент на его основе. Может быть, проблема связана с используемыми идентификаторами?

До и после:

ДО:

<kml xmlns="http://earth.google.com/kml/2.2"> 
<document> 
<placemark> 
<name>Chelsea</name> 
<snippet>London</snippet> 
<point> 
<coordinates>-0.2, 51.2,0.000000</coordinates> 
</point> 
<id>1</id> 
</placemark> 
<placemark> 
<name>World</name> 
<snippet>Willingdon </snippet> 
<point> 
<id>2</id> 
</placemark> 
</document> 
</kml> 

ПОСЛЕ:

<kml xmlns="http://earth.google.com/kml/2.2"> 
<document> 
<placemark> 
<name>World</name> 
<snippet>Willingdon </snippet> 
<point> 
<coordinates>-0.2,50.2,0.000000</coordinates> 
</point> 
<id>2</id> 
</placemark> 
</document> 
</kml> 
+0

Это скорее комментарий, чем ответ. – hakre

+0

Я думаю, что мой id param в порядке, этот возвращает то, что я ожидаю. '$ shop-> getElementsByTagName ('name') -> item (0) -> nodeValue;' по какой-то причине я не могу сохранить этот xml. я проверил разрешение на файл, и все могут писать. – gerpaick

Смежные вопросы