用PHP排序XML,返回JSON

用PHP排序XML,返回JSON,php,xml,json,sorting,xpath,Php,Xml,Json,Sorting,Xpath,我想知道有没有更好的办法。我从提要中读取XML,对节点进行排序(因为创建它的人不能…),然后作为JSON返回(因为这是一个AJAX调用,用JavaScript解析XML很糟糕) 我一直在使用Nev Stokes在上找到的很棒的xsort函数,但当json编码排序后的XML时遇到了一个问题(并没有返回到JavaScript作为json),我认为这是从xpath中深入到“作业”的问题 我绕着它走的感觉很脏,所以我想知道是否有更好的解决办法。我发现打印json_encode($xml)与json_en

我想知道有没有更好的办法。我从提要中读取XML,对节点进行排序(因为创建它的人不能…),然后作为JSON返回(因为这是一个AJAX调用,用JavaScript解析XML很糟糕)

我一直在使用Nev Stokes在上找到的很棒的xsort函数,但当json编码排序后的XML时遇到了一个问题(并没有返回到JavaScript作为json),我认为这是从xpath中深入到“作业”的问题

我绕着它走的感觉很脏,所以我想知道是否有更好的解决办法。我发现打印json_encode($xml)与json_encode($jobs)的不同之处在于$jobs字符串需要一个“{”Job:[xxx]}”包装器,所以我只是将这些东西连接在一起,它就工作了。。。但是感觉很不对

我的PHP代码如下;我很想知道是否有人有更优雅的解决方案

// curls in rss feed
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://overdriveinteractive.applicantstack.com/feed/jobs");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);

// loads xml
$xml = simplexml_load_string($output, 'SimpleXMLElement', LIBXML_NOCDATA);

// adds timestamp date field for sorting
foreach($xml->Job as $job) {
    $job->addChild('date', strtotime($job->DateCreated));
}

// sorts xml
$jobs = $xml->xpath('/Openings/Job');
xsort($jobs, 'date', SORT_DESC);

echo '{"Job":' . json_encode($jobs) . '}';

function xsort(&$nodes, $child_name, $order=SORT_ASC) {
    $sort_proxy = array();

    foreach ($nodes as $k => $node) {
        $sort_proxy[$k] = (string) $node->$child_name;
    }

    array_multisort($sort_proxy, $order, $nodes);
}
这应该起作用:

json_encode(array("Job" => $jobs));