通用使用usort对XML文档进行排序(由simplexml_load_file解析)

时间:2011-03-19 13:07:58

标签: php xml sorting simplexml

我有以下XML文档:

<?xml version="1.0" encoding="utf-8"?>
<entries>
  <entry>
    <name>Test</name>
    <ext>2</ext>
  </entry>
  <entry>
    <name>Test 2</name>
    <ext>1</ext>
  </entry>
</entries>

我用

解析它
$xml_data = simplexml_load_file("doc.xml");

然后我想对数据结构的条目(entry-Elements)进行排序:

function sort($key, $dir, $type)
{
    $srt = create_function('$e1,$e2', '
                          $type = "' . $type . '";
                          $dir  = "' . $dir . '";
                  $key  = "' . $key . '";

                                  if($type == "text")
                           return strcmp($e1->$key, $e2->$key);
                  else if($type == "int")
                  {
                       if((int) $e1->$key == (int) $e2->$key)
                               return 0;
                           else
                               return ((int) $e1->$key < (int) $e2->$key) ? -1 : 1;
                  }
                  else
                  {
                      error_log("Unknown sort type!", 0);
                      return 0;
                                  }
    ');

    usort($xml_data->entry, $srt);
}

示例调用如下:

sort('name', 'ASC', 'text'); // sort order not implemented yet

但它不起作用,因为数组似乎是第一个条目而不是条目数组。 所以我看起来像是什么原因:

printr($xml_data);

表示:

SimpleXMLElement Object
(
    [entry] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [name] => Test
                    [ext] => 2
                )

            [1] => SimpleXMLElement Object
                (
                    [name] => Test 2
                    [ext] => 1
                )
        )
)

问题是:我如何调用usort。

usort($xml_data->entry, $srt);

似乎是错误的,但是我对printr-Result的解释。

任何人都可以为我的问题提供一个提示或解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您无法对现有实例中的simplexml元素进行排序。但是,您可以删除所有这些内容,然后按顺序添加它们。