将XML子项添加到XML数据/文件的开头


Adding XML children to start of XML data/file

我正在尝试使用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对象数组进行排序