我想知道是否有更好的方法可以做到这一点。我正在从提要中读取 XML,对节点进行排序(因为创建它的人都不能......),然后以 JSON 形式返回(因为这是一个 AJAX 调用,并且在 JavaScript 中解析 XML 很糟糕)。
我一直在使用如何对多维 XML 文件进行排序?,但是我在对排序的 XML 进行 json 编码时遇到了一个问题(没有作为 JSON 返回到 JavaScript),我认为这是从 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);
}