我正在尝试使用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());
?>
这很好用。任何建议都表示感谢。
答案 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