Ho un file xml con la seguente struttura:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>

<pubblicazioni>

<libro>
<titolo>Titolo Prova 1</titolo>
<autore>Autore Prova 1</autore>
<anno></anno>
</libro>

<libro>
<titolo>Titolo Prova 2</titolo>
<autore>Autore Prova 2</autore>
<anno></anno>
</libro>

</pubblicazioni>


Questo xml viene caricato in un oggetto php con SimpleXml e convertito in una stringa json inviata in output.

Lato client, la stringa viene ricevuta da uno script Javascript, che utilizza la funzione evalJSON di Prototype per riconvertirla in un oggetto. Ecco l'aspetto della stringa come viene ricevuta, prima della decodifica:

{"libro":[{"titolo":"Titolo Prova 1","autore":"Autore prova 1","anno":{}},{"titolo":"Titolo Prova 2","autore":"Autore prova 2","anno":{}}]}

Le proprieta' dell'oggetto ricreato sono regolarmente disponibili e la lunghezza length indica correttamente 2.

Ora il problama:

Se l'xml originale viene privato di un nodo, riducendosi a un unico nodo, il tutto non funziona piu'. In particolare, con un solo nodo la stringa json ricevuta dal client perde le parentesi quadre e assume l'aspetto seguente:

{"libro":{"titolo":"Titolo Prova 1","autore":"Autore prova 1","anno":{}}}

Con questo aspetto, una volta valutata la stringa con evalJSON, l'oggetto non si ricompone piu' e la sua proprieta' length diviene "undefined".

Per verifica, ho provato a reinserire manualmente le parentesi quadre nella stringa json passata, e tutto funziona nuovamente in modo corretto.

Se qualcuno ha esperienze in merito a questo problema, sarei lieto se le condividesse su questo forum. Trovo si tratti di una cosa piuttosto delicata poiche' mette a rischio ad esempio la visualizzazione di qualunque galleria di foto, catalogo ecc. che utilizzi xml come database.

Grazie