nie mogę ogarnąć dość może kontrowersyjnej dla niektórych rzeczy, mianowicie normalnie i w innych przypadkach usuwając klucze z pliku xml funkcją poniżej, przy usunięciu ostatniej ladnie mi "biutifuje" plik, natomiast przy usuwaniu plików (i informacji o plikach w xml) zostawia dziury po usuniętych nodach:
// Funkcja do upiększania formatu xml po jego zapisaniu function formatXml($simpleXMLElement) { $xmlDocument = new DOMDocument('1.0', 'utf-8'); $xmlDocument -> preserveWhiteSpace = false; $xmlDocument -> formatOutput = true; $xmlDocument -> loadXML($simpleXMLElement -> asXML()); return $xmlDocument -> saveXML(); }
a tu cala klamerka
// W tym kroku sprawdźmy, czy nie należy usunąć jakichś plików $postFiles = $postPage['files']; foreach ($postFiles as $key => $f) { $found = $loadPageDataBase -> xpath('files/file[@id = "'.$key.'"]'); // Szukamy w bazie danych klucza o tym atrybucie ID $fileToDelete = './db/upload/'.$found[0][0]; // Usuwamy pozycję w bazie danych $dom = dom_import_simplexml($found[0]); $dom -> parentNode -> removeChild($dom); // Oraz usuwamy sam plik } else { echo "<script>window.location.href='./admin.php?page=pages&edit=".$postPage['id']."&danger=Nie odnaleziono pliku ".$found[0][0]."!'</script>"; exit; } } else { // Aktualizujemy nazwy plików $found[0]['title'] = $postFiles[$key]['title']; } } else { echo "<script>window.location.href='./admin.php?page=pages&edit=".$postPage['id']."&danger=Nie odnaleziono pliku o id ".$key." w bazie danych!'</script>"; exit; } } } // W tym kroku sprawdźmy, czy nie należy dodać jakichś plików ... $loadPageDataBase -> asXML($pathToPageToUpdate); // Układamy bazę na nowo (biutifujemy)
generalnie cały problem polega na tym, że kiedy zostaja usuniete wszystkie pliki robi sie dziura:
- przyklad pierwszy - mam 5 plikow - usune 4 z nich, wszystko jest ok, jak usune ostatni (piaty) robi sie dziura jako jeden wiersze w pliku xml.
- przyklad drugi - mam 5 plikow, usune wszystkie 5 - robi sie dziurna na 5 wierszy w pliku xml (chyba ze w miedzyczasie dodam jakies pliki - to wypelnia ta dziure, np dodam 3 pliki, zostanie dziura na 2 wiersze...
@EDIT
Podejrzewam - mam pewność że chodzi o tą funkcję - znalazłem w necie, że jedni mówią żeby preservewhitespace było na false, inni true - generalnie nei ma to znaczenia bo zawsze przy usunieciu wszystkich dzieci konkretnego klucza zostają jakieś "\n" i stad nie zmienia się na "<rodzic/>" tylko zostaje "<rodzic </rodzic>" i TYLKO w przypadku usunięcia wszystkich choldren, czyli pozostawienia pustego rodzica...