Uso di simpleXML

Salve,

dunque sto imparando simpleXML. Per esercitazione sto creando un semplice blog in cui i commenti degli utenti vengono memorizzati in files xml. Qualcosa del genere:

<comments>
  <ucomment>
    <name></name>
    <email></email>
    <site></site>
    <message></message>
  </ucomment>

  <ucomment>
    <name></name>
    <email></email>
    <site></site>
    <message></message>
  </ucomment>
</comments>

Chiaro che quando viene aggiunto un commento significa che un nuovo tag <ucomment> deve essere aggiunto in coda. Io pensavo di:

  • caricare il file;
  • memorizzarlo in una variabile con un ciclo foreach;
  • concatenare a questo punto il nuovo commento alla variabile;
  • quindi riscrivere il file con asXML().

Non ho ancora provato ma non ci dovrebbe essere alcun problema nel fare così. Prima però vorrei un vostro parere: pensate ci sia un modo più rapido?  :bye:

inviato 9 anni fa
usecram
X 0 X

carica il file con simplexml_load_file() , poi aggiungi i nodi con addChild() ed infine esporta tutto con asXML()

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Guardando sul Manuale http://it.php.net/manual/it/function.simplexml-element-asxml.php non c'è nemmeno questa funzione  :tichedoff:. Grazie  :bye:

risposto 9 anni fa
usecram
X 0 X

Con addChild() tutto ok  O0

Ora sto affrontando il problema della modifica e dell'eliminazione di un nodo.

Ho letto un tutorial su devshed in cui per modificare un nodo, dopo aver caricato il documento xml, si procede così: $xml->ucomment[0]->name = "valore modificato" per poi esportare con asXML(). Ho pensato che per eliminare un nodo potrei fare unset ($xml->ucomment[0]) e quindi esportare. Per funzionare funziona.

Non vorrei però che mi stessi perdendo una qualche funzione removeChild()  :P.

Le funzioni disponibili sono tutte qui vero?  :bye:

risposto 9 anni fa
usecram
X 0 X

queste qui:

http://www.php.net/manual/en/ref.simplexml.php

Per la cancellazione dovrebbe funzionare anche:

$xml->ucomment[0] = null;

(P.S.: usa sempre la versione inglese del manuale ufficiale)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Wow che rapidità! Grazie del consiglio  :bye:

risposto 9 anni fa
usecram
X 0 X

Ehm, un'altra piccola questione...

Mi sono accorto che addChild converte automaticamente tutti i caratteri speciali in entità html. Se io invece volessi consentire l'uso di un paio di tag HTML come potrei inserire una sezione CDATA senza che addChild se ne abbia a male? Sto guardando ma non mi sembra di avere trovato nulla a proposito.

Certo potrei adottare il BBcode ma volendo sapere se sia possibile inserire una sezione CDATA?

 :bye:

risposto 9 anni fa
usecram
modificato 9 anni fa
X 0 X

ma se leggi il nodo contenente l'entità html, questa come ti viene restituita? originale o modificata?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ti riporto direttamente il file xml se provo a scrivere ad esempio: commento <b>grassetto</b><br /> Riga a capo

<comments>
  <ucomment id="1" time="23/06/2007, 18-49" ip="127.0.0.1">
    <name>xxx</name>
    <email>xxx@email.it</email>
    <message>commento &lt;b&gt;grassetto&lt;/b&gt;&lt;br /&gt;Riga a capo</message>
    <site>0</site>
    <notify>0</notify>
    <published>0</published>
  </ucomment>
</comments>

Però hai ragione la stringa viene restituita originale  :-X.  :bye:

risposto 9 anni fa
usecram
modificato 9 anni fa
X 0 X

E' normale che venga scritta in quel modo altrimenti quei caratteri speciali andrebbero a "rovinare" il file XML. Si tratta comunque di una sostituzione finalizzata alla sola realizzazione del file XML, quindi puoi considerarla come una conversione interna e del tutto trasparente.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda