Редактирование XML с помощью PHP. Почему работает только первый раз?

Поэтому моя проблема заключается в том, что когда я редактирую XML-файл (ниже) с некоторыми строками PHP, все работает в первый раз, а затем удаляет ложные строки и создает новые в неправильных местах.

Здесь PHP-скрипт для удаления строк:

<?php session_start(); // The file $filePath = '/....../test/test.xml'; // Grab file into an array, by lines $fileArr = file($filePath); // Remove desired line unset($fileArr[7]); // $fileArr[15] == line #16 unset($fileArr[16]); // idem unset($fileArr[25]); // idem //Put back with PHP5 file_put_contents($filePath, implode('', $fileArr )); session_destroy(); ?> 

Здесь PHP-скрипт для записи новых строк

 <?php session_start(); // The file $filePath = '/....../test/test.xml'; // Grab file into an array, by lines $fileArr = file($filePath); //Change $etichettaasse = "\t\t\t\t<string>\t14 gen</string>\n\r"; $medianord = "\t\t\t\t<number>\t280\t</number>\n\r"; $mediasud = "\t\t\t\t<number>\t280\t</number>\n\r"; // Replace line $fileArr[11] = $etichettaasse; $fileArr[19] = $medianord; $fileArr[27] = $mediasud; // Implode and save file_put_contents($filePath, implode('', $fileArr )); session_destroy(); ?> 

Здесь исходный XML:

 <chart> <axis_category color='ffffff' skip='0' size='12' alpha='80' /> <axis_value color='ffffff' skip='10' size='12' show_min='false' min="80" max="130" /> <chart_border top_thickness='1' bottom_thickness='1' left_thickness='1' right_thickness='1' /> <chart_data> <row> <null/> <string> 3 dic</string> <string> 10 dic</string> <string> 17 dic</string> <string> 24 dic</string> <string> 31 dic</string> </row> <row> <string>Media Nord</string> <number> 102.72 </number> <number> 101.60 </number> <number> 101.85 </number> <number> 101.84 </number> <number> 101.84 </number> </row> <row> <string>Media Sud</string> <number> 102.28 </number> <number> 101.24 </number> <number> 101.70 </number> <number> 101.88 </number> <number> 101.88 </number> </row> </chart_data> </chart> 

После первого раунда PHP-скрипта он обновляется по запросу:

 <chart> <axis_category color='ffffff' skip='0' size='12' alpha='80' /> <axis_value color='ffffff' skip='10' size='12' show_min='false' min="80" max="130" /> <chart_border top_thickness='1' bottom_thickness='1' left_thickness='1' right_thickness='1' /> <chart_data> <row> <null/> <string> 10 dic</string> <string> 17 dic</string> <string> 24 dic</string> <string> 31 dic</string> <string> 14 gen</string> </row> <row> <string>Media Nord</string> <number> 101.60 </number> <number> 101.85 </number> <number> 101.84 </number> <number> 101.84 </number> <number> 280 </number> </row> <row> <string>Media Sud</string> <number> 101.24 </number> <number> 101.70 </number> <number> 101.88 </number> <number> 101.88 </number> <number> 280 </number> </row> </chart_data> 

После второго раунда PHP-скрипта:

 <chart> <axis_category color='ffffff' skip='0' size='12' alpha='80' /> <axis_value color='ffffff' skip='10' size='12' show_min='false' min="80" max="130" /> <chart_border top_thickness='1' bottom_thickness='1' left_thickness='1' right_thickness='1' /> <chart_data> <row> <null/> <string> 17 dic</string> <string> 24 dic</string> <string> 14 gen</string> <string> 14 gen</string> </row> <row> <string>Media Nord</string> <number> 101.60 </number> <number> 101.84 </number> <number> 280 </number> <number> 280 </number> <row> <string>Media Sud</string> <number> 101.24 </number> <number> 101.70 </number> <number> 280 </number> </row> <number> 280 </number> 

Я также был бы рад, если бы у меня был только один PHP-файл вместо 2, но я не знаю, как это сделать.

Это лучший способ изменить этот XML-файл, или есть другой способ?

Обратите внимание, что новая строка, которая будет записана в HTML от пользователя.

У меня есть сценарий «start» для удаления содержимого, которое я хочу удалить.

Что ты думаешь об этом?

 <?php $file = '/...../test.xml'; $fp = fopen(file,"w"); // open it for WRITING ("w") if (flock($fp, LOCK_EX)) { //do actions here $xml = file_get_contents($file); $sxe = simplexml_load_string($xml); echo '<pre>'; // "delete the 1th string of row 1, etc." unset($sxe->chart_data->row[0]->string[0]); unset($sxe->chart_data->row[1]->number[0]); unset($sxe->chart_data->row[2]->number[0]); $sxe->chart_data->row[0]->addChild('string', 'test'); $sxe->chart_data->row[1]->addChild('number', '999'); $sxe->chart_data->row[2]->addChild('number', '9999'); file_put_contents($file, $sxe->asXML()); // unlock the file flock($fp, LOCK_UN); } else { // flock() returned false, no lock obtained print "Could not lock $file!\n"; } ?> с <?php $file = '/...../test.xml'; $fp = fopen(file,"w"); // open it for WRITING ("w") if (flock($fp, LOCK_EX)) { //do actions here $xml = file_get_contents($file); $sxe = simplexml_load_string($xml); echo '<pre>'; // "delete the 1th string of row 1, etc." unset($sxe->chart_data->row[0]->string[0]); unset($sxe->chart_data->row[1]->number[0]); unset($sxe->chart_data->row[2]->number[0]); $sxe->chart_data->row[0]->addChild('string', 'test'); $sxe->chart_data->row[1]->addChild('number', '999'); $sxe->chart_data->row[2]->addChild('number', '9999'); file_put_contents($file, $sxe->asXML()); // unlock the file flock($fp, LOCK_UN); } else { // flock() returned false, no lock obtained print "Could not lock $file!\n"; } ?> с <?php $file = '/...../test.xml'; $fp = fopen(file,"w"); // open it for WRITING ("w") if (flock($fp, LOCK_EX)) { //do actions here $xml = file_get_contents($file); $sxe = simplexml_load_string($xml); echo '<pre>'; // "delete the 1th string of row 1, etc." unset($sxe->chart_data->row[0]->string[0]); unset($sxe->chart_data->row[1]->number[0]); unset($sxe->chart_data->row[2]->number[0]); $sxe->chart_data->row[0]->addChild('string', 'test'); $sxe->chart_data->row[1]->addChild('number', '999'); $sxe->chart_data->row[2]->addChild('number', '9999'); file_put_contents($file, $sxe->asXML()); // unlock the file flock($fp, LOCK_UN); } else { // flock() returned false, no lock obtained print "Could not lock $file!\n"; } ?> с <?php $file = '/...../test.xml'; $fp = fopen(file,"w"); // open it for WRITING ("w") if (flock($fp, LOCK_EX)) { //do actions here $xml = file_get_contents($file); $sxe = simplexml_load_string($xml); echo '<pre>'; // "delete the 1th string of row 1, etc." unset($sxe->chart_data->row[0]->string[0]); unset($sxe->chart_data->row[1]->number[0]); unset($sxe->chart_data->row[2]->number[0]); $sxe->chart_data->row[0]->addChild('string', 'test'); $sxe->chart_data->row[1]->addChild('number', '999'); $sxe->chart_data->row[2]->addChild('number', '9999'); file_put_contents($file, $sxe->asXML()); // unlock the file flock($fp, LOCK_UN); } else { // flock() returned false, no lock obtained print "Could not lock $file!\n"; } ?>