Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329

    Leggere un XML (by mootools)

    Come da titolo ho qualche problema a leggere un xml, usando mootools, qualcuno di voi mi saprebbe dare una mano?

    XML:
    Codice PHP:
    <?xml version="1.0" encoding="utf-8"?>
    <item name="Fulvio" eta="32" >FULVIO</item>
    <item name="Elisa" eta="23" />
    <item name="Danilo" eta="29" />
    <item name="Vito" eta="31" />
    <item name="Immacolata" eta="71" />
    Javascript:
    Codice PHP:
    var req = new Request({
                    
    url:"persone.xml",
                    
    update:$("cont"),
                    
    onRequest: function(){ $('cont').set("html""Richiesta in corso..."); },
                    
    onSuccess: function(txtxml){
                                var 
    _xml xml.documentElement();
                                ...???
                    },
                    
    onFailure: function(xhr){ $('cont').set("html""Richiesta fallita! "+xhr); }
            });
            
            
    req.get(); 
    Grazie
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  2. #2
    esattamente cosa devi fare con l'XML che ottieni?
    I DON'T Double Click!

  3. #3
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    semplicemente stampare nell'elemento $("cont") quello che contiene l'XML....in particolare volevo provare a stampare gli attributi dei tag "item"...anche se un tag l'ho riempito per vedere le differenze.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  4. #4
    ma "stampare" l'xml in un elemento? ti basta avere la risposta in formato testo e fare $("cont").set('text', response);
    I DON'T Double Click!

  5. #5
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Si lo so, ma io vorrei usare "responseXML" e non "responseText", cont text mi stampa tutto...io vorrei navigare fra i diversi nodi e/o gli attributi di un tag.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  6. #6
    Allora la cosa è diversa, devi vedere la struttura DOM di un XML, che alla fine si comporta come la struttura DOM dell'HTML.

    Tu hai a disposizione le funzioni di ricerca base sul documentElement che hai sull'document della pagina.
    Ad esempio se volessi in una lista tutti gli item, ppotresti fare:
    codice:
    var doc = xml.documentElement();
    var list = doc.getElementsByTagName("item");
    in list ora avrai un array con tutti i nodi con tag item.

    Se avessi gli elementi in una struttura tipo

    codice:
    <items>
       <item>
            <subitem>
            </subitem>
       </item>
       <item>
            <subitem>
            </subitem>
       </item>
       <item>
            <subitem>
            </subitem>
       </item>
       <item>
            <subitem>
            </subitem>
       </item>
    </items>
    Su items puoi chiamare getElementsByTagName("item") per ottenere tutti gli item, oppure getElementsByTagName("subitem") per ottenere tutti i subitem, tuttavia tu puoi chiamare getElementsByTagName("subitem") su ciascun item per ottenere i subitem solo di quell'item. Spero di essere stato chiaro.

    Se vuoi ciclare su tutta la struttura in modo ricorsivo devi implementare una funzione ricorsiva per entrare nell'albero dom.

    Codice PHP:
    function Navigate(node){
       
    //Qui prima fai qualcosa con in nodo
       
    if(node.nodeType == 1){ //È un elemento
           //Questo è un ciclio importante
           
    for(var node.firstChild!= nullc.nextSibling){ 
              
    Navigate(c);
           }
       }

    Poi ti basta chiamare Navigate su tutti i figli del DocumentElement ed accedi in tutta la struttura DOM.
    I DON'T Double Click!

  7. #7
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Si si chiaro...ma mi sa che il mio errore è stato quello di impostare una struttura errata per il file XML, ovvero senza una root <items></items>...perchè quello che hai fatto tu lo avevo già scritto senza ricevere nessun risultato es:

    xml.documentElement().getElementsByTagName("item") .length;

    Ora riproverò e vedremo, grazie.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  8. #8
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Ma la lettura non è corssBrowser?....
    es: "xml.documentElement.getElementsByTagName("ite m")[0].textContent"; va su tutti tranne che IE, mentre per IE dovrei scrivere ".text"
    Quindi si deve fare il controllo sul browser???
    Hanno rotto con ste differenze interpretuali.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  9. #9
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Ok tutto risolto, ho letto che le differenze di interpretazione dei broswer ci sono solo per alcune cose del parsing, mentre ad esempio per leggere gli attributi di un tag XML sono gli stessi comandi.
    L'errore cmq che facevo era quello di non aver inserito una ROOT dopo l'intestazione del filem XML.

    Grazie 1000.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  10. #10
    comunque, io trovo sempre meglio leggere il value dei nodi di testo contenuti in un nodeElement:

    codice:
    <item name="Luigi" age="32">Hahaha</item>
    Ottenuto l'element item farei
    codice:
    var el; //L'element item
    var text = "";
    for(var c = el.firstChild; c != null; c = c.nextSibling){
        if(c.nodeType == 3){ //Text Node
            text+= c.nodeValue;
        }
    }
    alla fine in text ci sarà "Hahaha".
    I DON'T Double Click!

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.