Salve a tutti.
Ho un problema di sorting con un file xml in php.
Sto cercando di riordinare un file xml (news.xml), che vedete di seguito:
codice:
<?xml version="1.0" encoding="iso-8859-1"?>
<Menu>
<myItem id="1" name="Item"/>
<myItem id="4" name="Item"/>
<myItem id="2" name="Item"/>
<myItem id="6" name="Item"/>
<myItem id="9" name="Item"/>
</Menu>
per mezzo di php e di DOMXML:
Codice PHP:
<?php
// creo DOM
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
// carico XML
$doc->load("news.xml");
$root = $doc->documentElement;
// Recupero tutti gli elementi del nodo myItem
$news= $root->getElementsByTagName('myItem');
// calcolo la lunghezza dell'Array
$num = $news->length;
// Creo un Array nel quale le chiavi sono i valori dell'attributo id del nodo e i valori sono
// la posizione attuale nel file xml
$itemarr = array();
for ($i = 0 ; $i <=$num-1 ; $i++){
$itemarr[$doc->getElementsByTagName('myItem')->item($i)->getAttributeNode('id')->value]=$i;
}
//Ottengo l'array: Array ( [1] => 0 [4] => 1 [2] => 2 [6] => 3 [9] => 4)
//Riordino l'array in ordine decrescente (numerico) sulla base delle chiavi (gli "id" all'interno
//del file XML)
krsort($itemarr, SORT_NUMERIC);
//Ottengo l'array: Array ( [9] => 4 [6] => 3 [4] => 1 [2] => 2 [1] => 0)
//Ciclo per riordinare il file xml ponendo gli elementi con l'attributo id più alto in cima
//andando a prendere i vari elementi nella posizione originaria del file xml che mi viene
//indicata dai valori degli elementi dell'array e "appendendoli" in sequenza.
foreach ($itemarr as $item){
$x=$doc->getElementsByTagName('myItem')->item($item);
$root->appendChild($x);
}
// Salvo il documento aggiornato
print $doc->save("news.xml");
Anche se arzigogolato... il giochetto sugli array ha un senso logico, il problema è che il file xml aggiornato che viene fuori si ordina senza un "apparente" senso logico. I vari nodi si spostano ma non si ordinano in modo decrescente sulla base degli gli id...
Ecco cosa mi viene fuori:
codice:
<?xml version="1.0" encoding="iso-8859-1"?>
<Menu>
<myItem id="2" name="Item"/>
<myItem id="6" name="Item"/>
<myItem id="4" name="Item"/>
<myItem id="9" name="Item"/>
<myItem id="1" name="Item"/>
</Menu>
Avete idea di dove possa essere il problema???
Vi sarei davvero grato se riusciste a darmi una mano nella risoluzione di questo arcano.
Grazie mille in anticipo.
Stefano