使用 PHP 对 XML 进行排序,返回 JSON


sorting XML with PHP, returning JSON

我想知道是否有更好的方法可以做到这一点。 我正在从提要中读取XML,对节点进行排序(因为创建它的人不能...),然后返回为JSON(因为这是一个AJAX调用,并且在JavaScript中解析XML很糟糕)。

我一直在使用 Nev Stokes 在如何对多维 XML 文件进行排序?中找到的很棒的 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));