2010-10-22 3 views
1

Я попытался получить XML-файл для сортировки и не повезло. Через полтора дня мне нужна помощь эксперта. Благодарю.Как отсортировать многомерный XML-файл?

Мой XML-файл (укороченный для примера):

<?xml version="1.0" encoding="iso-8859-1"?> 
<deadlines> 
    <deadline> 
     <date>2010-06-01</date> 
     <text>Application for Summer Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-01</date> 
     <text>Application for Fall Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-31</date> 
     <text>Summer Bill Due</text> 
    </deadline> 
</deadlines> 

Мой PHP:

<?php 

$xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT'].'/feeds/deadlines.xml'); 

// start THIS WORKS 
echo'<pre>'; 
foreach($xml as $deadline) echo <<<EOF 
    Date: {$deadline->date} 
    Text: {$deadline->text} 


EOF; 
echo'</pre>'; 
// end THIS WORKS 

?> 

Кто-нибудь есть простой PHP решение для сортировки файла XML на "дату" до проведения эхо на экран?

Благодаря

+0

возможно дубликат [Сортировка массива объектов SimpleXML] (http://stackoverflow.com/questions/2119686/sorting-an-array-of-simplexml-objects) – Gordon

+0

Спасибо Гордон, но это не дублировать. Я проверил код в разделе «Сортировка массива объектов SimpleXML», и ни одно из них не работает. Решения там не обрабатывают XML при обработке через simplexml_load_file(). –

+0

Ищем решение, если кто-то там попытался отсортировать файлы XML. В течение 4 дней на этом :(Спасибо. –

ответ

5

Ладно, извините за ходить по домам раньше - я добавил другой ответ для ясности, но с использованием метода сортировки прокси-соединения I, связанный с.

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); 
} 

$structure = '<?xml version="1.0" encoding="utf-8" ?> 
<deadlines> 
    <deadline> 
     <date>2010-06-01</date> 
     <text>Application for Summer Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-01</date> 
     <text>Application for Fall Due</text> 
    </deadline> 
    <deadline> 
     <date>2010-07-31</date> 
     <text>Summer Bill Due</text> 
    </deadline> 
</deadlines>'; 

$xml = simplexml_load_string($structure); 
$nodes = $xml->xpath('/deadlines/deadline'); 

// Sort by date, descending 
xsort($nodes, 'date', SORT_DESC); 
var_dump($nodes); 
+0

Не могли бы вы сделать это с помощью xpath? '$ Xml-> xpath ('/ deadlines/deadline/date')' – Robin

+0

Робин, это даст вам только массив дат, а не отсортированные конечные узлы, которые OP находится после. –

+0

Nev ... только что вернулся с обеда, скопировал и вставил ваш код и запустил его дословно. Он работает. (Но вы уже знали это :) Так что я думаю, что могу его переместить вперед и настроить его здесь, т. е. мне нужно иметь возможность читать в XML. Я вижу, что у вас есть жесткий код, назначенный переменной $ var. Я буду работать над ним и быстро отправить сообщение. Надеюсь, я могу щелкнуть зеленая кнопка ответа на этом плохом мальчике. –

Смежные вопросы