Salve, come da titolo devo ordinare (con punteggio decrescente) i nodi di una classifica di squadre salvata in un foglio xml del tipo:
codice:
<root>
<squadra>
<nome>Sq1</squadra>
<punti>10</punti>
</squadra>
<squadra>
<nome>Sq2</squadra>
<punti>16</punti>
</squadra>
...ecc
</root>
Apro il documento e richiamo la funzione ordina(documento) creata da me con:
Codice PHP:
$doc = new DOMDocument('1.0', 'utf-8');
$doc->load("classif.xml");
$sq_ord = ordina($doc);
Quindi quello che mi aspetto e' che $sq_ord sia una nodeList di squadre ordinate secondo il criterio detto prima. La funzione ordina è la seguente:
Codice PHP:
function ordina($doc)
{
$sq = $doc->getElementsByTagName("squadra");
$root = $doc->documentElement;
$tmp = NULL;
$top = $sq->length;
while ($top > 1)
{
for ($i = 0; $i < $top-1; $i++)
{
if (($sq->item($i)->getElementsByTagName("punti")->item(0)->nodeValue) < ($sq->item($i+1)->getElementsByTagName("punti")->item(0)->nodeValue))
{
$tmp = $sq->item($i)->cloneNode(true);
$root->replaceChild($sq->item($i), $sq->item($i+1));
$root->replaceChild($sq->item($i+1), $tmp);
}
}
$top--;
}
return $sq;
}
Cosa sbaglio??
L'errore che ottengo è il seguente:
"Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in D:\classifiche.php:99 Stack trace: #0 D:\classifiche.php(99): DOMNode->replaceChild(Object(DOMElement), Object(DOMElement)) #1 D:\classifiche.php(156): ordina(Object(DOMDocument)) #2 {main} thrown in D:\classifiche.php on line 99"
La riga 99 è: $root->replaceChild($sq->item($i+1), $tmp); nella funzione ordina.
Grazie mille.