我正在尝试使用xml文件向页面添加注释列表。我想先列出最近的注释,所以当添加新的注释时,我想将其添加到xml的开头。addChild追加到末尾,所以这不好,我无法理解DOMNode insert_before方法,因为我想在每次出现child之前将其添加到开头(我在任何地方都找不到这样做的示例——奇怪)。
xml文件看起来像;
<comments>
<comment>
<date>20130625</date>
<name>Jocky Wilson</name>
<text>Something about darts presumably</text>
</comment>
<comment>
<date>20130622</date>
<name>Jacky Wilson</name>
<text>It was reet petite etc</text>
</comment>
</comments>
我最初用创建文件;
<?php
$xmlData = "< load of xml etc...";
$xml = new SimpleXMLElement($xmlData);
file_put_contents("comments.xml", $xml->asXML());
?>
这很好。任何建议,不胜感激。
作为注释中提到的解决方案的替代方案:
使用addChild
,让它在任意位置添加节点,按<date>
排序并回显:
$xml = simplexml_load_string($x); // assume XML in $x
$comments = $xml->xpath("//comment");
$field = 'date';
sort_obj_arr($comments, $field, SORT_DESC);
var_dump($comments);
// function sort_obj_array written by GZipp, see link below
function sort_obj_arr(& $arr, $sort_field, $sort_direction) {
$sort_func = function($obj_1, $obj_2) use ($sort_field, $sort_direction) {
if ($sort_direction == SORT_ASC) {
return strnatcasecmp($obj_1->$sort_field, $obj_2->$sort_field);
} else {
return strnatcasecmp($obj_2->$sort_field, $obj_1->$sort_field);
}
};
usort($arr, $sort_func);
}
请参阅GZipp的原始函数:对SimpleXML对象数组进行排序