So my problem is that when I'm editing an XML file (below) with some PHP lines, everything works the first time, and then it deletes false lines and creates the new ones in the wrong places.
Here the PHP script for deleting the rows:
<?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();
?>
Here the PHP script to write new rows
<?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();
?>
Here the original 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>
After the first round of PHP script, it is updated as requested:
<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>
After the second round of the PHP script:
<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>
I'd also be happy if I could have only one PHP file instead of 2, but I have no idea how to do that.
Is this the best way to modify this XML file, or is there another way?
Notice that the new line that will be written to HTML from a user.
I have this "start" script for deleting the content I want to delete.
What do you think of it?
<?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";
}
?>