Newsgroup: it.comp.lang.javascript
Titolo: XML - Informazione riguardo alla struttura

questa è un pezzo di una  struttura xml che mi aveva spedito Zer0.
<xml>
        <function name="checkUser">
                <arguments>
                        <item name="FirstName" type="string">Ray</item>
                        <item name="LastName"
type="string">Kinsella</item>
                        <item name="Age" type="number">30</item>
                        <item name="DateOfBirth"
type="date">10/12/1960</item>
                </arguments>
        </function>
</xml>
domandona: che differenza c'è tra devinire N tag diversi e N tag con lo
stesso nome ("item") e proprietà name
diversa? è come creare un array?
e nel caso riportato, come acceso agli elementi?
grazie

 e nel caso riportato, come acceso agli elementi?
Iterandoli. Una volta che hai una nodelist, puoi semplicemente fare un 
ciclo del tipo:
for (var i=0;i<nodelist.length;i++)
	alert(nodelist[i].getAttribute("name")+"="+nodelist[i].childNodes
[0].nodeValue);
(fatto al volo)
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)


se ho imparato bene dai tuoi insegnamenti, se ci fosse
<argument>
    pippo
    <item name="a1">...</item>
    <item name="a2">...</item>
</argument>
allora getElementsByTagName("arguments")[0].childNodes mi restituirebbe
"pippo" xè è un tag node giusto?

 "pippo" xè è un tag node giusto?
Esatto. Difatti io evito di mischiare nodeText con altri nodi.
Non e' necessario che vi sia del testo all'interno del tag (io 
personalmente lo reputo un approccio non del tutto corretto.. ma e' 
opinabile, ovviamente).
Bisogna pensare "a oggetti".
"argument" ha dei figli, che sono "item". Gli "item". Ogni "item" ha le 
sue proprieta' che lo definiscono (name, type..) piu' il suo valore 
effettivo.
arguments e' un contenitore. Non ha bisogno di avere un "valore" che lo 
definisce.
Quindi dobbiamo chiederci: Cos'e' "pippo"? E impostare l'XML di 
conseguenza.
Ad esempio, e' il nome della funzione? Allora non deve stare dentro 
"arguments", perche' "arguments" contiene solo i parametri della nostra 
funzione. "arguments" e' figlio del tag funzione, quindi va spostato nel 
tag precedente.
E se e' il nome della funzione, allora e' una sua proprieta', un suo 
attributo.
Ecco quindi che abbiamo:
<function name="pippo">
	<arguments>
		:
		:
	</arguments>
</function>


ok tutto chiaro.
segna che poi mi mandi la fattura :-)

 segna che poi mi mandi la fattura :-)
Te ci scherzi.. ;P


ZER0 wrote:

una precisazione: se io utilizzo n tag item con nomi diversi, se poi devo
assegnare il valore del tag ad una variabile devo fare uno switch giusto?
for (var i=0;i<nodelist.length;i++){
    switch nodelist[i].getAttribute("name"){
        case nome1:
        case nome2:
    }
}

 assegnare il valore del tag ad una variabile devo fare uno switch giusto?
No, il concetto di base e' proprio quello di evitarlo.
Puoi usare l'attributo "name" per generare una variabile:
Partendo da una nodelist di tag "item" cosi' come te li ho scritti io, 
potresti rozzamente ciclare i nodelist, e concatenare una stringa di cui 
poi fare l'eval. Per esempio, se hai un nodo "item" che ha come name 
"FirstName", potresti ottenere una variabile "FirstName" con il value 
dell'item.
E per questo non c'e' bisogno di switch.
Grazie alla proprieta' "type", inoltre, potresti "distinguere" che tipo 
di variabile si tratta, e ricrearla in JS in modo appropriato.



scusa mi son spiegato male: escludendo il discorso di utilizzare un eval (che
sembra non funzionarmi, cannerò qualcosa... o forse perchè avviene lato server
in VBS... boh..), se io voglio assegnare il valore del tag "item" con nome
"param1" devo utilizzare uno switch?

 in VBS... boh..),
a) Passa a JScript anche lato server.
b) L'eval in VBS esiste e funziona
c) Ti ho gia' detto cos'e' che canni, con l'eval.. prova a fare un 
Response.Write della stringa che vorresti passare all'eval e ti 
accorgerai dov'e' che sbagli.


 e' possibile referenziarsi ad esso.
Come non detto, l'oggetto padre e' lo ScriptingContext, ma in ogni caso 
pare non sia possibile accedere ad esso (non ha alcuna proprieta' che lo 
autoreferenzi).


grande Zer0!!
ho fatto andate l'eval.
ora devo aggiungere però una funzione che trasformi i doppi apici " in "" (sono in
vbs :-) ) per evitare essori se il " è presente nella stringa. (un bel replace
insomma)
ed il gioco è fatto
grazie ancora


ho parlato troppo presto!
se in una stringa ho il valore di "a capo (vbcrlf) " ?
mi da errore la eval, giusto?

 mi da errore la eval, giusto?
Ovviamente. Basta fare un replace anche di quello.


 Ovviamente. Basta fare un replace anche di quello.
sě ma un repalce con che cosa?

 sě ma un repalce con che cosa?
con vbcrlf :P
Non e' difficile, e' lo stesso discorso che hai fatto per i doppi apici. 
Supponendo di avere tale valore:
How much
there is
to see
se tu provi a fare un eval di tale stringa, ottieni qualcosa del tipo:
Dim mystring
mystring="How much
there is
to see"
questo perche' lui ti "esegue" le andate a capo.. E, ovviamente, va in 
errore. Ma non e' questo che noi vogliamo ottenere. Cosa vogliamo 
ottenere, allora? Questo:
Dim mystring
mystring="How much" & vbCrLf & "there is" & vbCrLf & "to see"
.. Hai capito adesso? Ricordati sempre di fare un write della stringa da 
valutare, perche' in questo modo puoi capire come mai va in errore, e 
confrontare la stringa che hai ottenuto, con cio' che vorresti ottenere, 
e fare i dovuti cambiamenti.


che pirla hai ragione.......
grazie mille.
nn č che sei di milano? cosě al max una mattina ti pago cappuccio e
brioches......

 brioches......
Ma tu guarda, sono di Firenze.. Ma lavoro giust'appunto dalle parti di 
Milano :P (non citta'..), ed ho un appartamento a Saronno :P
.. Mi sa' che un giorno approfittero' del cappuccio e della brioches 
(fosse solo per fare un po' di vita sociale.. in zona conosco poche 
persone)



mhh... io lavoro zona Sesto.. ma son di Brescia....
Saronno č un oltre...
