Pagina 4 di 5 primaprima ... 2 3 4 5 ultimoultimo
Visualizzazione dei risultati da 31 a 40 su 42
  1. #31
    Originariamente inviato da Darios81
    Scusa nn e' per male,gia ho provato questa soluzione,infatti se ci fai caso se metti due tag uguali nn funziona piu......
    perche prende sempre il primo
    Sto provando a modificare la tua loaddata.....purtroppo ho un problema con la ricorsione.......
    Cosa vuol dire che non funziona più? L'xml su cui lavorare qual'è? Non vedo perchè ci dovrebebro essere due tag uguali, comunque ammettendo che ci siano fammi un esempio di come dovrebbe essere questo xml con de tag uguali..Non puoi lavorare senza sapere a priori la struttura del tuo xml,non tanto nei nomi degli elementi quanto piuttosto nei livelli gerarchici esistenti tra loro.La cosa migliore sarebbe che tu fornissi un dtd che descriverebbe tutti i documenti che il tuo prog deve manipolare comunque puoi anch edirlo a voce. In altre parole mi devi dire una roba del tipo: l'elemnto padre di tutti si deve chiamare così e deve contenere uno solo (o pure uno o più) elementi che si chiamano cosà .Ognuno di questi deve contenere due elemnti di nome cosà1 e cosà2 eccetera....
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  2. #32
    Originariamente inviato da Darios81
    Questo e il codice che ho modificato.............

    public static void loadData(Element rootElement,DefaultMutableTreeNode root,int i,int cont)
    {
    System.out.println("\nSiamo in LoadData");
    List children = rootElement.getChildren();
    Iterator childrenIter = children.iterator();
    while(childrenIter.hasNext())
    {
    Element current = (Element)childrenIter.next();
    System.out.println("Il ciclo corrente e : "+i);
    System.out.println("Il TAG corrente e : "+current.getName());
    System.out.println("L'elemento corrente e : "+current.getTextNormalize());
    int ris=current.getTextNormalize().compareTo("");
    if(ris!=0)
    cont++;
    System.out.println("Il ciclo interno e : "+cont);
    System.out.println("L'elemento e Stringa vuota : "+ris);
    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(current.getName());
    root.add(newNode);
    loadData(current,newNode,i++,cont);
    }
    }
    Il problema e che dovrei aggiornare il contantore cont
    purtroppo ad ogni ricorsione si azzerra in quanto torna al valore precedente.....
    puoi aiutarmi?
    Ma cosa te ne fai di questa scusa? L'hai capito a cosa serve? Oppure sono io che non ho capito cosa devi fare?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  3. #33
    Originariamente inviato da unomichisiada
    Cosa vuol dire che non funziona più? L'xml su cui lavorare qual'è? Non vedo perchè ci dovrebebro essere due tag uguali, comunque ammettendo che ci siano fammi un esempio di come dovrebbe essere questo xml con de tag uguali..Non puoi lavorare senza sapere a priori la struttura del tuo xml,non tanto nei nomi degli elementi quanto piuttosto nei livelli gerarchici esistenti tra loro.La cosa migliore sarebbe che tu fornissi un dtd che descriverebbe tutti i documenti che il tuo prog deve manipolare comunque puoi anch edirlo a voce. In altre parole mi devi dire una roba del tipo: l'elemnto padre di tutti si deve chiamare così e deve contenere uno solo (o pure uno o più) elementi che si chiamano cosà .Ognuno di questi deve contenere due elemnti di nome cosà1 e cosà2 eccetera....
    guarda questo e il file XML:
    <Test>
    <Storia>
    <Argomento>
    <Domanda1>Come si chiamo il cavallo bianco di napoleone?</Domanda1>
    <Domanda2>Come si chiamo il cavallo bianco di napoleone?</Domanda2>
    <Domanda3>Come si chiamo il cavallo bianco di napoleone?</Domanda3>
    </Argomento>
    </Storia>
    <Storia>
    <Argomento>
    <Domanda1>Come si chiamo il cavallo bianco di napoleone?</Domanda1>
    <Domanda2>Come si chiamo il cavallo bianco di napoleone?</Domanda2>
    <Domanda3>Come si chiamo il cavallo bianco di napoleone?</Domanda3>
    </Argomento>
    </Storia>
    <Storia>
    <Argomento>
    <Domanda1>Come si chiamo il cavallo bianco di napoleone?</Domanda1>
    <Domanda2>Come si chiamo il cavallo bianco di napoleone?</Domanda2>
    <Domanda3>Come si chiamo il cavallo bianco di napoleone?</Domanda3>
    </Argomento>
    </Storia>
    </Test>

    come vedi la root e Test che a sua volta a un figlio storia(storia e tipo un oggetto)che contiene a sua volta altri 3 tag.
    Io devo prendere i contenuti dei tag Domanda.Come puoi vedere storia e un tag che si ripete.
    Cmq con questo sono riuscita ad entrare in maniera corretta nei tag che mi servono:
    ---------------------------------------------------------------------
    //il contatore cont mi serve per vedere in che locazione devo scrivere(infatti il mio scopo e tornare un array di stringhe)
    public static int loadData(Element rootElement,DefaultMutableTreeNode root,int i,int cont)
    {
    System.out.println("\nSiamo in LoadData");
    List children = rootElement.getChildren();
    Iterator childrenIter = children.iterator();
    while(childrenIter.hasNext())
    {
    Element current = (Element)childrenIter.next();
    System.out.println("Il ciclo corrente e : "+i);
    System.out.println("Il TAG corrente e : "+current.getName());
    System.out.println("L'elemento corrente e : "+current.getTextNormalize());//mi torna il valore del tag puntato
    int ris=current.getTextNormalize().compareTo("");
    //se non e una stringa vuota(ossia se prendo test e storia torna stringhe vuote)
    if(ris!=0)
    cont++;
    System.out.println("Il ciclo interno e : "+cont);
    System.out.println("L'elemento e Stringa vuota : "+ris);
    DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(current.getName());
    root.add(newNode);
    cont=loadData(current,newNode,i++,cont);//qua mi tengo aggiornato il contatore
    }
    return cont;
    }

    la funzione nn e' completa devi vedere solo il funzionamento,in quanto ancora mi devo creare l'array di stringhe e poi modificarlo.
    Tuttavia siccome l'array di stringhe deve essere tornato dalla funzione loadata,sn andato in difficolta.
    Perche codesta funziona torna int che serve per tornare aggiornata la variabile cont che mi da gli indici dell'array.
    Provalo e nell'output capisci cosa intendo.

  4. #34
    Scusa ma mi sto un po innervosendo, se vuoi il mio aiuto devi pure darmi retta quando ti do un consiglio e darmi una risposta quando ti faccio una domanda... ,ne convieni?
    Allora mi serve sapere esattamente cosa devi fare, dato quell'xml che mi hai postato cosa vuoi che ti restituisca la funzione?Il contenuto di tutti i tag domanda in un unico array?O una array di questo tipo per ogni argomento? O che cosa? E' alquanto difficile che la ricorsione ti serva se è così, per questo ti ho detto di lasciar stare loadData ch eè stata scritta per tutt'altro. Poi se vuoi fai come preferisci. Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #35
    Originariamente inviato da unomichisiada
    Scusa ma mi sto un po innervosendo, se vuoi il mio aiuto devi pure darmi retta quando ti do un consiglio e darmi una risposta quando ti faccio una domanda... ,ne convieni?
    Allora mi serve sapere esattamente cosa devi fare, dato quell'xml che mi hai postato cosa vuoi che ti restituisca la funzione?Il contenuto di tutti i tag domanda in un unico array?O una array di questo tipo per ogni argomento? O che cosa? E' alquanto difficile che la ricorsione ti serva se è così, per questo ti ho detto di lasciar stare loadData ch eè stata scritta per tutt'altro. Poi se vuoi fai come preferisci. Ciao
    Scusa io voglio restituiti in un array di stringhe tutti i valori del tag domanda!!!grz per l'aiuto ma sto diventando pazzo

  6. #36
    Originariamente inviato da Darios81
    Scusa io voglio restituiti in un array di stringhe tutti i valori del tag domanda!!!grz per l'aiuto ma sto diventando pazzo
    Cioè il tuo metodo deve prendere il Document come argomento e restituire (in questo caso) un arrai di 9 posizioni tutte contenenti "Come si chiamo il cavallo bianco di napoleone?" ?
    Ho capito bene? E' importante capirci
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #37
    Originariamente inviato da unomichisiada
    Cioè il tuo metodo deve prendere il Document come argomento e restituire (in questo caso) un arrai di 9 posizioni tutte contenenti "Come si chiamo il cavallo bianco di napoleone?" ?
    Ho capito bene? E' importante capirci
    si!!!!! poi cmq il numero può cambiare..!!

  8. #38
    Originariamente inviato da Darios81
    si!!!!! poi cmq il numero può cambiare..!!
    Ok.Ora ti butto giù qualcosa che ti faccia vedere come si fa.
    Altro dubbio: quanti argomenti ci possono essere dentro un elemento storia?
    Oltre a storia ci possono essere altri elementi dello stesso livello tipo geometria, geografia...?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #39
    Originariamente inviato da unomichisiada
    Ok.Ora ti butto giù qualcosa che ti faccia vedere come si fa.
    Sei il capo!!!!!!ti aspetto e nel farttempo provo qualcosa..

  10. #40
    codice:
    import java.awt.Component;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Vector;
    
    import javax.swing.JTree;
    import javax.swing.ToolTipManager;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeCellRenderer;
    
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    import org.xml.sax.InputSource;
    
    
    public class XMLExample
    {
        public static void main(String[] args)
        {
            String xmlFile = "esempio.xml";
            Document xml = loadFromXML(xmlFile);
            Vector questions = new Vector();
            loadQuestions(xml.getRootElement(),questions);
            Object[] questionsArray = questions.toArray();
            for (int i = 0; i < questionsArray.length; i++)
            {
                System.out.println(questionsArray[i]);
            }
            
        }
       
        //carica un file xml in un oggetto Document pronto per la manipolazione
        public static Document loadFromXML(String xmlFileName)
        {
            try
            {
                SAXBuilder parser = new SAXBuilder();
                
                //le prossime tre righe sono importanti per settare riuscire a impostare
                //un caracheter encoding che supporti le lettere accentate in fase di lettura dell'xml
                //(il default prevede UTF-8 che non le supporta ed il parser ti lancia un'eccezione)
                FileInputStream fileInputStream = new FileInputStream(xmlFileName);
                InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "ISO-8859-15");
                InputSource inputSource = new InputSource(inputStreamReader);
                Document xml = parser.build(inputSource);
                return xml;
            }
            catch (JDOMException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return null;
        }
        
        
        //iterativa
        public static void loadQuestions(Element rootElement,Vector questions)
        {
    
            List storyElements = rootElement.getChildren("Storia");
            Iterator storyElementsIt = storyElements.iterator();
            while(storyElementsIt.hasNext())
            {
                Element current = (Element)storyElementsIt.next();
                List argumentElements = current.getChildren("Argomento");
                Iterator argumentElementsIt = argumentElements.iterator();
                while(argumentElementsIt.hasNext())
                {
                    Element cur = (Element)argumentElementsIt.next();
                    //sorge qualche problema se argomento ha figli diversi 
                    //da elementi di tipo domanda, comunque io invece che chiamare
                    //gli elemnti domanda1,domanda2...li chiamerei tutti domanda e la
                    //posizione la metterei come valore di un attributo
                    List questionElements = cur.getChildren();
                    Iterator questionElementsIt = questionElements.iterator();
                    while(questionElementsIt.hasNext())
                    {
                        Element curr = (Element)questionElementsIt.next();
                        questions.add(curr.getValue());
                    }
                }
            }
        }
        
        //ricorsiva
    //    public static void loadQuestions(Element rootElement,Vector questions)
    //    {
    //        List children = rootElement.getChildren();
    //        Iterator childrenIter = children.iterator();
    //        while(childrenIter.hasNext())
    //        {
    //            Element current = (Element)childrenIter.next();
    //            if(current.getName().toLowerCase().indexOf("domanda") != -1)
    //                questions.add(current.getValue());
    //            loadQuestions(current,questions);
    //        }
    //    }
    // 
    
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    s corrispondente
        public static void loadData(Element rootElement,DefaultMutableTreeNode root)
        {
            List children = rootElement.getChildren();
            Iterator childrenIter = children.iterator();
            while(childrenIter.hasNext())
            {
                Element current = (Element)childrenIter.next();
                DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(current.getName());
                root.add(newNode);
                loadData(current,newNode);
            }
        }
        //iterativa
        public static void loadQuestions(Element rootElement,Vector questions)
        {
    
            List storyElements = rootElement.getChildren("Storia");
            Iterator storyElementsIt = storyElements.iterator();
            while(storyElementsIt.hasNext())
            {
                Element current = (Element)storyElementsIt.next();
                List argumentElements = current.getChildren("Argomento");
                Iterator argumentElementsIt = argumentElements.iterator();
                while(argumentElementsIt.hasNext())
                {
                    Element cur = (Element)argumentElementsIt.next();
                    //sorge qualche problema se argomento ha figli diversi 
                    //da elementi di tipo domanda, comunque io invece che chiamare
                    //gli elemnti domanda1,domanda2...li chiamerei tutti domanda e la
                    //posizione la metterei come valore di un attributo
                    List questionElements = cur.getChildren();
                    Iterator questionElementsIt = questionElements.iterator();
                    while(questionElementsIt.hasNext())
                    {
                        Element curr = (Element)questionElementsIt.next();
                        questions.add(curr.getValue());
                    }
                }
            }
        }
        
        //ricorsiva
    //    public static void loadQuestions(Element rootElement,Vector questions)
    //    {
    //        List children = rootElement.getChildren();
    //        Iterator childrenIter = children.iterator();
    //        while(childrenIter.hasNext())
    //        {
    //            Element current = (Element)childrenIter.next();
    //            if(current.getName().toLowerCase().indexOf("domanda") != -1)
    //                questions.add(current.getValue());
    //            loadQuestions(current,questions);
    //        }
    //    }
    // 
    
    }
    Premesso che l'xml potresto organizzarlo meglio,con quello che hai postato tu direi che si può fare così.CI sono due soluzioni,una ricorsiva (che penso fosse dove volevi arrivare tu) e l'altra iterativa.Ciao
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

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 © 2026 vBulletin Solutions, Inc. All rights reserved.