添加XML子项以启动XML数据/文件

时间:2013-06-25 11:55:49

标签: php simplexml

我正在尝试使用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());
?>

这很好用。任何建议都表示感谢。

1 个答案:

答案 0 :(得分: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的原始功能:Sorting an array of SimpleXML objects