2010-10-22 6 views
1

J'ai essayé d'obtenir un fichier XML à trier et n'ai pas eu de chance. Après un jour et demi, j'ai besoin de l'aide d'un expert. Merci.Comment trier un fichier XML multidimensionnel?

Mon fichier XML (raccourci pour l'exemple):

<?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> 

Mon 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 

?> 

Quelqu'un at-il une solution simple de PHP pour trier le fichier XML sur "date" avant la écho à l'écran?

Merci

+0

double possible de [Tri d'un tableau d'objets SimpleXML] (http://stackoverflow.com/questions/2119686/sorting-an-array-of-simplexml-objects) – Gordon

+0

Merci Gordon, mais ce n'est pas un dupliquer. J'ai testé le code à "Trier un tableau d'objets SimpleXML" et rien de tout cela ne fonctionne. Les solutions ne traitent pas le XML lors du traitement via simplexml_load_file(). –

+0

Toujours à la recherche d'une solution, si quelqu'un là-bas a essayé de trier les fichiers XML. Aller sur 4 jours à ceci :(Merci –

Répondre

5

Bon, désolé pour faire le tour des maisons avant - j'ai ajouté une réponse différente pour plus de clarté, mais en utilisant la technique de mandatement de tri I lié.

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

Ne pourriez-vous pas faire cela avec xpath? '$ Xml-> xpath ('/ deadlines/deadline/date')' – Robin

+0

Robin, cela ne vous donnerait un tableau de dates, Je ne suis pas rentré dans les noeuds de délai triés par le PO –

+0

Nev ... Je viens juste de rentrer du déjeuner et j'ai copié et collé ton code et je l'ai couru mot pour mot Cela fonctionne (Mais tu le savais déjà :) Donc je pense pouvoir le bouger Je dois donc pouvoir lire dans le XML, je vois que vous avez du code dur assigné au $ var. Je vais travailler dessus et je reviendrai bientôt. bouton de réponse vert sur ce mauvais garçon –