【发布时间】:2017-03-09 15:47:10
【问题描述】:
我目前在使用 SimpleXML 时遇到了一个小问题。我不知道为什么,但由于某种原因,它没有将我的更改保存在 XML 文件中。
<?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>
我想对 xml 文件进行排序以按顺序(按日期)获取工作日
$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');
输出很好,但由于某种原因它不会保存我对文件的更改,它会创建文件但使用旧的 xml 树,所以我想我必须以某种方式应用我的排序树(当然覆盖)。
这里有人有答案吗?
【问题讨论】:
-
在执行
$trees = $xml->xpath('//*[@date]');之后,$trees是一个与$xml没有连接的结果数组。你必须从 $trees 中创建一个真正的 simple_xml 对象。 -
您理所当然地认为
SimpleXMLElement::xpath()返回的SimpleXMLElement对象数组链接到原始SimpleXMLElement。文档对此只字未提,这可能是一个过分的假设。 -
在这里阅读它是如何完成的:stackoverflow.com/questions/23105465/… 在答案中寻找
//Replace old elements with new -
另外,最好使用
<day weekday="montag" date="12.03.2017">之类的节点,如果可以更改,请这样做。之后,您可以查找节点day而不是属性date。
标签: php sorting xpath simplexml