1

我想知道是否有更好的方法可以做到这一点。我正在从提要中读取 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);
}
4

1 回答 1

0

这应该有效:

json_encode(array("Job" => $jobs));
于 2012-05-23T19:38:03.747 回答