I am currently having a small problem with SimpleXML. I don't know why but for some reason its not saving my changes in the XML file.
<?xml version="1.0" encoding="ISO-8859-1"?>
<KW10>
<dienstag date="07.03.2017">
<arbeitszeit/>
<pausen/>
<kilometer/>
<fahrer/>
<hotel/>
<fahrtzeit_hin/>
<fahrtzeit_weg/>
<erledigt/>
</dienstag>
<mittwoch date="08.03.2017">
<arbeitszeit/>
<pausen/>
<kilometer/>
<fahrer/>
<hotel/>
<fahrtzeit_hin/>
<fahrtzeit_weg/>
<erledigt/>
</mittwoch>
<donnerstag date="09.03.2017">
<arbeitszeit/>
<pausen/>
<kilometer/>
<fahrer/>
<hotel/>
<fahrtzeit_hin/>
<fahrtzeit_weg/>
<erledigt/>
</donnerstag>
<freitag date="10.03.2017">
<arbeitszeit/>
<pausen/>
<kilometer/>
<fahrer/>
<hotel/>
<fahrtzeit_hin/>
<fahrtzeit_weg/>
<erledigt/>
</freitag>
<samstag date="11.03.2017">
<arbeitszeit/>
<pausen/>
<kilometer/>
<fahrer/>
<hotel/>
<fahrtzeit_hin/>
<fahrtzeit_weg/>
<erledigt/>
</samstag>
<sonntag date="12.03.2017">
<arbeitszeit/>
<pausen/>
<kilometer/>
<fahrer/>
<hotel/>
<fahrtzeit_hin/>
<fahrtzeit_weg/>
<erledigt/>
</sonntag>
<montag date="06.03.2017">
<arbeitszeit von="21:00" bis="05:00"/>
<kilometer/>
<fahrer is="true"/>
<hotel/>
<fahrtzeit_hin von="20:30" bis="20:45"/>
<fahrtzeit_weg von="05:15" bis="05:30"/>
<erledigt/>
<pausen>
<pause_0 von="23:30" bis="00:00"/>
</pausen>
</montag>
</KW10>
I wanted to sort the xml file to get the weekdays in order (by date)
$xml = simplexml_load_file('users/'.$_SESSION['vorname'].$_SESSION['nachname'].'/'.$kw.'.xml');
$trees = $xml->xpath('//*[@date]');
usort ($trees, function($a, $b) { return strcmp($a['date'], $b['date']); });
echo '<pre>'; print_r($trees); echo '</pre>';
$xml->asXML('kwtest.xml');
The Output is fine but for some reason it won't save my changes to the file, it creates the file but with the old xml tree so I guess I have to somehow apply my sorted tree (overwrite of course).
Is anyone in here having an answer for this?
So what you can do is:
//After creating sorted $trees generate a new xml
$newXml = '';
foreach($trees as $t){
$newXml .= $t->asXML().PHP_EOL;
}
#merge that with header and root-node
$newXml = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?>
<KW10>
'.$newXml.'
</KW10>');
#now it looks like
echo '<pre>'; print_r(htmlentities($newXml->asXML())); echo '</pre>';
#save it, maybe unlink the old version before
$newXml->asXML('kwtest.xml');