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

    AS3 Estrapolare i nodi da file XML

    Ciao a tutti,

    non riesco ad estrarre tutti i nodi da un file XML .

    File XML
    <voli>
    <volo id="AZ1570">
    <partenza h="06:45">Cagliari</partenza>
    <arrivo a="07:50">Roma</arrivo>
    </volo>
    <volo id="AZ1576">
    <partenza h="13:25">Cagliari</partenza>
    <arrivo h="14:30">Roma</arrivo>
    </volo>
    </voli>

    Codice Flash AC3:

    function onComplete(event:Event):void {
    var loader:URLLoader=URLLoader(event.target);
    var result:XML=new XML(loader.data);
    var myXML:XMLDocument=new XMLDocument();
    myXML.ignoreWhite=true;
    myXML.parseXML(result.toXMLString());
    var node:XMLNode=myXML.firstChild;

    trace('ID= '+node.firstChild.attributes['id']);
    trace('Partenza= '+node.firstChild.firstChild.attributes['h']);
    }

    riesco a ricavare solo i primi due...
    e possibile fare un ciclo for per tutti?

    grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    30
    Ciao,

    c'è un attributo del nodo <arrivo> che una volta hai usato ' h ' ed un' altra ' a ' .
    Supponiamo che l' attributo sia sempre ' a ' , questo è il codice per recuperare quei dati ( tramite 2 cicli innestati ):

    codice:
    var result:XML=new XML(loader.data);
    var myXML:XMLDocument=new XMLDocument();
    myXML.ignoreWhite=true;
    myXML.parseXML(result.toXMLString());
    var node:XMLNode=myXML.firstChild;
    var n:int=int(node.childNodes.length);
    for(var i:int=0;i<n;i++)
    {
    	trace('id volo: '+node.childNodes[i].attributes['id']);
    	var s:int=node.childNodes[i].childNodes.length;
    	for(var j:int=0;j<s;j++)
    	{
    		if(!j)
    			trace('ora partenza: '+node.childNodes[i].childNodes[j].attributes['h']+' da '+node.childNodes[i].childNodes[j].firstChild.nodeValue);
    		else
    			trace('ora arrivo: '+node.childNodes[i].childNodes[j].attributes['a']+' a '+node.childNodes[i].childNodes[j].firstChild.nodeValue);
    	}
    }
    E questo è l' output:
    id volo: AZ1570
    ora partenza: 06:45 da Cagliari
    ora arrivo: 07:50 a Roma
    id volo: AZ1576
    ora partenza: 13:25 da Cagliari
    ora arrivo: 14:30 a Roma

  3. #3
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    in AS3 non è comunque più necessario utilizzare le proprietà childNodes e firstChild, ma è possibile risalire direttamente ai nodi richiamandone il nome stesso

    per l'xml proposto è possibile fare molto semplicemente un parsing del genere, sfruttando la classe XMLList

    Codice PHP:
    var s:String "test.xml";
    var 
    r:URLRequest = new URLRequest(s);
    var 
    l:URLLoader = new URLLoader(r);
    l.addEventListener(Event.COMPLETEcompleteHandler);
    function 
    completeHandler(e:Event) {
        var 
    d:XMLList = new XML(l.data).volo;
        for(var 
    i:int 0d.length(); i++){
            
    trace(d[i].attribute('id'));
            
    trace(d[i].partenza.attribute('h'));
            
    trace(d[i].partenza);
            
    trace(d[i].arrivo.attribute('h'));
            
    trace(d[i].arrivo);
            
    trace('________________________');
        }


  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    30
    Bella dritta !
    Devo provare anche io con XMLList.
    Ho qualche dubbio che funzioni sul popolare degli arrays bidimensionali o più.
    Faccio delle prove


  5. #5
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da 4stars
    Bella dritta !
    Devo provare anche io con XMLList.
    Ho qualche dubbio che funzioni sul popolare degli arrays bidimensionali o più.
    Faccio delle prove

    non mi è capitato ancora, comunque ho testato il parsing in questa maniera su di un feed RSS e devo dire che con pochi passaggi si ottiene davvero un ottimo risultato

  6. #6
    OK! FUNZIONA ALLA GRANDE.. GRAZIE A TUTTI!

    HO LETTO SEMPRE NEL MITICO HTML UNA GUIDA DOVE E' POSSIBILE

    FORMATTARE I DOCUMENTI XML CON "BAD FORMAT" DEL TIPO

    <volo id="AZ1570"/> <partenza h="06:45">Cagliari</partenza> <arrivo h="07:50">Roma</arrivo>
    <volo id="AZ1572"/> <partenza h="07:20">Cagliari</partenza> <arrivo h="08:25">Roma</arrivo>
    <volo id="AZ1578"/> <partenza h="09:05">Cagliari</partenza> <arrivo h="10:10">Roma</arrivo>

    per risparmiare qualche kb e se usato solo dallo stesso programmatore dato
    che non è un XML standard.

    Ho provato con lo stesso codice ma mi viene sequalato che non è
    (giustamente) un XML corretto... ma nella guida c'e' un esempio in AS2 è funziona!

    Si puo fare in AS3?

    grazie!

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    AS3 segue lo standard E4X (ECMAScript for XML), questo almeno per la classe XML "standard"
    ha comunque tenuto la possibilità di usare la vecchia classe XML, ribattezzata in AS3 come XMLDocument, perciò immagino che attraverso tale classe sia possibile comunque "giocare" con gli xml bad format esattamente come si faceva in AS1/2, ovviamente utilizzandone comunque la nuova gestione (attraverso la classe URLLoader)

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.