0

我正在尝试使用 xml 文件向页面添加评论列表。我想首先列出最近的评论,所以当添加新评论时,我想将它添加到 xml 的开头。addChild 附加到末尾,所以这不好,我无法理解 DOMNode insert_before 方法,因为我想在每个其他孩子出现之前在开头添加它(而且我找不到任何这样做的例子 - 很奇怪)。

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());
?>

这很好用。任何建议都非常感激。

4

1 回答 1

0

作为评论中提到的解决方案的替代方案:
使用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 对象数组进行排序

于 2013-06-25T17:18:41.737 回答