Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    parsing xml con ricorsiva

    salve ragazzi, ho un file xml di questo tipo:

    - <root>
    - <ciao>
    <dato1 valore="iksadnoisa oidasnd" />
    <dato2 valore="sadmsapdm sadm" />
    <dato3 valore="sapdpsakd213012302103'2103'213" />
    <parametro valore="094385" />
    </ciao>
    - <heyhey>
    <dato3 valore="sapdpsakd213012302103'2103'213" />
    <parametro valore="094385" />
    </heyhey>
    </root>

    -----------------------------------------------
    devo creare un array associativo dove ad esempio
    mioarray['ciao']['dato1']="iksadnoisa oidasnd";

    ho creato una funzione ricorsiva che accetta come argomento
    il contenuto di <root> (quindi il riferimento a questo nodo)
    ma non riesco, dopo due giorni di lavoro, a concluderla.
    se lancio la funzione ora mi ritorna un array associativo contenente
    dato1: "iksadnoisa oidasnd"
    dato2: "sadmsapdm sadm"
    dato3: "sapdpsakd213012302103'2103'213"
    parametro: "094385"

    -----------------------------------------------
    ecco la funzione:

    function xml2array (head)
    {
    head = head.childNodes;
    arr=new Array();
    for (var i in head)
    {
    if (head[i].nodeName!=null and head[i].nodeName!=undefined)
    {
    if(head[i].attributes.valore==undefined)
    arr[ head[i].nodeName ] = xml2array(head[i]);
    else
    arr[ head[i].nodeName ]=head[i].attributes.valore;
    }
    }
    return arr;
    }

    si vivono molte vite e si muore una volta sola

  2. #2
    ragazzi ho risolto, ma ci sono un po' rimasto male. avete presente quando si incomincia a vagliare le strade più surrealiste perche' quelle logiche non hanno portato da nessuna parte? allora ho pensato di chiamare l'array dentro la funzione ogni volta in maniera diversa, mano a mano che scendeva all'interno dei tag dei dati xml.
    ora funziona...ma scusate, l'array ARR sopracitato non dovrebbe essere locale alla funzione? non capisco perche' al suo interno ci metteva solo il lavoro dell'ultima chiamata della funzione.
    si vivono molte vite e si muore una volta sola

  3. #3

    DATABASE ----> FLASH

    Se puo' essere utile alla comunità, vi posto il risultato delle mie fatiche, sottoforma di minipillola.

    -------------------------------------------------------
    PREMESSA

    L'obiettivo e' quello di trasportare dati da un database a flash, tramite un file xml opportunamente impostato.
    Per chi non conoscesse xml e l'interazione fra flash e xml, rimando alla guida Falsh - XML.

    IL FILE XML

    Afforenterò il problema a partire dal file xml, dando per scontata la sua generazione tramite php. L'impostazione del mio lavoro permette non solo di trasportare dati, ma anche di catalogarli. Per rendere possibile cio', il file xml deve rispettare alcune regole. Ecco un esempio dal quale partire:
    <libri>
    <gialli>
    <1>
    <titolo valore="dieci piccoli indiani"></titolo>
    <autore valore="agatha cristie"></autore>
    </1>
    <2>
    <titolo valore="il nome della rosa"></titolo>
    <autore valore="umberto eco"></autore>
    </2>
    </gialli>
    <manuali>
    <1>
    <titolo valore="come costruire un muro"></titolo>
    <autore valore="pino pallino"></autore>
    </1>
    </manuali>
    </libri>

    come vedete c'e' un tag <libri> che racchiude tutti quanti,
    i libri sono poi catalogati in gialli e manuali. all'interno di queste categorie troviamo i libri veri e propri, insomma, le righe del nostro database. li ho racchiusi all'interno di tag che contengono l'id della riga.
    una volta individuati i libri con i tag ID, possiamo riportare il valore dei campi con questa dicitura:
    <nomecampo valore=""></nomecampo>

    DENTRO FLASH

    carichiamo il nostro file xml:

    ffp = "miofile.xml";
    libreria = new XML();
    libreria.load(ffp);
    libreria.onLoad = function (success)
    {
    if (libreria.loaded)
    {
    archivio = xmlrr(libreria);
    archivio = xml2array(archivio,0);
    }
    }

    il cuore di tutto risiede nelle due funzioni soggetto di questa minipillola: xmlrr e xml2array.
    la prima si preoccupa di entrare nel nodo di nostro interesse, ossia <libri>. Questa chiamata non e' proprio banale, poiche' potrebbero esserci altre istruzioni, righe, spazi, all'interno del nostro file xml e noi, tramite questa funzione andiamo a cercare proprio il tag libri.
    la seconda funzione funziona in ricorsivo, e ci restituira' un array associativo di tante dimensioni quante sono state le nostre catalogazioni. Nel nostro caso, possiamo accedervi così:
    archivio['gialli']['2']['titolo']="il nome della rosa"
    archivio['gialli']['2']['autore']="umberto eco"

    LE FUNZIONI


    function xmlrr (head)
    {
    return head.childNodes[0];
    }


    function xml2array (head,level)
    {
    head = head.childNodes;
    _root['arr'+level]=new Array();
    for (var i in head)
    {
    if (head[i].nodeName!=null and
    head[i].nodeName!=undefined)
    {
    if(head[i].attributes.valore==undefined)
    _root['arr'+level][ head[i].nodeName ] =
    xml2array(head[i],level+1);
    else
    _root['arr'+level][ head[i].nodeName ] =
    head[i].attributes.valore;
    }
    }
    return _root['arr'+level];
    }


    sicuramente il codice va migliorato in modi che io non so immaginare, nel mio piccolo spero di essere stato utile e chiaro.
    si vivono molte vite e si muore una volta sola

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.