giovedì 6 novembre 2014

XML

E' possibile lavorare con i file in formato XML utilizzando le funzioni XML presenti in Livecode.
Interagire con un file XML è molto simile all'interazione con i database, ci si connette ad un dato sotto forma di XML. A quel punto il file (o il dato) XML è caricato in memoria, e anche se lo modifichiamo, finchè non lo scarichiamo da qualche parte, non verranno salvate le modifiche da nessuna parte.
Prima di tutto vediamo come caricare un file XML, se abbiamo un file il codice è il seguente:


on mouseUp
   answer file "FIle XML da caricare:"
   put "file:" & it into tXMLData
   put revXMLCreateTreeFromFile(tXMLData, true, true, true) into sXMLID
   set the conID of this card to sXMLID #così recuperiamo il dato
end mouseUp

Se invece avete i dati da qualche altra parte, basta:
on mouseUp
   put revXMLCreateTree(tXMLData, true, true, true) into sXMLID
   set the conID of this card to sXMLID #così recuperiamo il dato
end mouseUp

Adesso ipotizziamo che il dato XML sia:

<amici></amici>

Perchè vogliamo fare una rubrica con i nostri amici, allora dobbiamo inserire un identificativo unico per ognuno di essi, quindi il codice da usare è:


   put the conID of this card into tID
   revXMLAddNode tID, "amici", "ID","1"
   revXMLAddNode tID, "amici", "ID","2"


Quando si aggiunge un nodo, bisogna sempre tutto l'albero fino a dove vogliamo inserirlo. Abbiamo aggiunto due nodi ID e abbiamo aggiunto il valore 1 e 2 in essi, quindi il nostro dato XML è:

<?xml version="1.0"?>
<amici>
  <ID>1</ID>

  <ID>2</ID>
</amici>



La prima riga è stata aggiunta da Livecode per specificare il formato XML utilizzato. Bene ora dobbiamo inserire i nomi, i valori del tag si specificano con le parentesi quadre:

on mouseUp
   put the conID of this card into tID
   revXMLAddNode tID, "amici/ID[1]", "Nome","Mario"
   revXMLAddNode tID, "amici/ID[2]", "Nome","Luigi"
end mouseUp

Ora il nostro dato XML è:

<?xml version="1.0"?>
<amici>
   <ID>1

        <Nome>Mario</Nome>
   </ID>
   <ID>2
        <Nome>Luigi</Nome>
    </ID>
</amici>

Per aggiungere i cognomi, basta:

on mouseUp
   put the conID of this card into tID
   revXMLAddNode tID, "amici/ID[1]", "Cognome","Rossi"
   revXMLAddNode tID, "amici/ID[2]", "Cognome","Bianchi"
end mouseUp

e il nostro dato diviene:

<?xml version="1.0"?>
<amici>
   <ID>1

      <Nome>Mario</Nome>
      <Cognome>Rossi</Cognome>
   </ID>
   <ID>2
      <Nome>Luigi</Nome>
      <Cognome>Bianchi</Cognome>
   </ID>
</amici>

Per sapere il nome del primo contatto basta:

put revXMLNodeContents(tiD, "amici/id[1]/nome")

Per  eliminare un nodo basta:

on mouseUp
   put the conID of this card into tID
   revXMLDeleteNode tID,"amici/ID[1]"
end mouseUp

e il nostro dato sarà:

<?xml version="1.0"?>
<amici>
   <ID>2

      <Nome>Luigi</Nome>
      <Cognome>Bianchi</Cognome>
   </ID>
</amici>

Per avere tutto l'albero basta:

put revXMLtext(tID)

In questo modo possiamo salvarlo dove ci pare.