Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Package jdom e file .xml

    Ciao a tutti!!

    Ho il seguente file .xml

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <TODO_LIST> 
      <ITEM importanza="3" perc_completamento="75" completata="no"> 
        <DESCR>Fare la spesa</DESCR> 
      </ITEM> 
      <ITEM importanza="7" perc_completamento="100" completata="si">
        <DESCR>Stendere i panni</DESCR> 
      </ITEM> 
      <ITEM importanza="4" perc_completamento="0" completata="no"> 
        <DESCR>Cucinare</DESCR> 
      </ITEM> 
    </TODO_LIST>
    estrapolo correttamente i dati in questo modo:

    codice:
     public static void main(String[] args) throws Exception {
            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build("file.xml");
           
            Iterator itr = doc.getRootElement().getChildren().iterator();
    
            while (itr.hasNext()) {
                Element elem = (Element) itr.next(); //ITEM
                Element description = elem.getChild("DESCR");  // DESCR SOTTO ITEM
    
                System.out.println("*" + description.getText()); 
                System.out.println("\tImportanza: " + elem.getAttributeValue("importanza")); 
                System.out.println("\tCompletamento: " + elem.getAttributeValue("perc_completamento") + "%");
                System.out.println("\tItem copmletata: " + elem.getAttributeValue("completata")+"\n"); 
              
            }       
        }
    Se modifico il file .xml in questo modo:

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    
    <rss version="0.92">  
    
    <TODO_LIST> 
      <ITEM importanza="3" perc_completamento="75" completata="no"> 
        <DESCR>Fare la spesa</DESCR> 
      </ITEM> 
      <ITEM importanza="7" perc_completamento="100" completata="si">
        <DESCR>Stendere i panni</DESCR> 
      </ITEM> 
      <ITEM importanza="4" perc_completamento="0" completata="no"> 
        <DESCR>Cucinare</DESCR> 
      </ITEM> 
    </TODO_LIST>
    </rss>
    purtroppo la classe postata sopra genera un'eccezione e non funziona piu':


    Exception in thread "main" java.lang.NullPointerException
    at jdom.main(jdom.java:23)


    sapete aiutarmi! grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Qual'è la riga 23 nel main?

    Risulta evidente che viene effettuata una chiamata su un oggetto null

    Inserisci sotto a:

    Element elem = (Element) itr.next(); //ITEM

    Un System.out.println() che stampi elem.

  3. #3
    Ciao!!

    la linea 23 è System.out.println("*" + description.getText());

    Se provo a stampare System.out.println(elem); -> risultato = [Element: <TODO_LIST/>]

    Se provo a stampare System.out.println(description); -> risultato = null

    il file data.xml modificato è questo (ho soltato aggiunto il campo rss):

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="0.92"> 
    <TODO_LIST> 
      <ITEM importanza="3" perc_completamento="75" completata="no"> 
        <DESCR>Fare la spesa</DESCR> 
      </ITEM> 
      <ITEM importanza="7" perc_completamento="100" completata="si">
        <DESCR>Stendere i panni</DESCR> 
      </ITEM> 
      <ITEM importanza="4" perc_completamento="0" completata="no"> 
        <DESCR>Cucinare</DESCR> 
      </ITEM> 
    </TODO_LIST>
    </rss>
    Il mio scopo è accedere a DESCR..

    Non so, forse basta solo ripetere Element elem = (Element) itr.next(); per accedere ad ITEM per poi accedere a DESCR

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    si suppongo che quell'elemento (la tua variante) non abbia descrizione e per questo va in errore
    RTFM Read That F*** Manual!!!

  5. #5
    si, è sicuramente quello il problema! pero' io non so come accedere a descr

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    ho capito, se non ce lo metti non esiste.
    O controlli se è presente sennò vai avanti o metti un campo descr anche vuoto per quella riga
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    non esisterà mai in quel punto perche hai aggiunto un tag in testa e questo ora rappresenta l'elemento root, te lo dice anche la stampa

    Se provo a stampare System.out.println(elem); -> risultato = [Element: <TODO_LIST/>]
    quindi:

    codice:
    //non è piu ITEM ma TODO_LIST
    Element elem = (Element) itr.next(); 
    //DESCR sotto TODO_LIST non esisterà mai
    Element description = elem.getChild("DESCR");
    in DESCR non ci arrivi mai devi recuperare prima i tag figli di TODO_LIST(quindi tutti i tag ITEM) e poi da questi puoi recuperare il tag DESCR, praticamente c'è un passaggio in +.

  8. #8
    grazie mille! ho risolto il problema pero' solo in parte

    codice:
            while (itr.hasNext()) {
                Element elem = (Element) itr.next(); // 
                Element t = elem.getChild("ITEM");  // RECUPERA TAG FIGLI DI TODOLIST
                Element a = t.getChild("DESCR");  // RECUPERA TAG FIGLI DI ITEM
                
                System.out.println(a.getText()); 
              
            }
    Il codice di sopra funziona perfettamente, solo che mi stampa solo il primo tag DESCR, "ovvero fare la spesa".

    di seguito riporto di nuovo il file .xml

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="0.92"> 
    <TODO_LIST> 
      <ITEM importanza="3" perc_completamento="75" completata="no"> 
        <DESCR>Fare la spesa</DESCR> 
      </ITEM> 
      <ITEM importanza="7" perc_completamento="100" completata="si">
        <DESCR>Stendere i panni</DESCR> 
      </ITEM> 
      <ITEM importanza="4" perc_completamento="0" completata="no"> 
        <DESCR>Cucinare</DESCR> 
      </ITEM> 
    </TODO_LIST>
    </rss>
    Grazie ancora

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    codice:
    Element t = elem.getChild("ITEM");  // RECUPERA TAG FIGLI DI TODOLIST
    getChild se non ricordo male recupera solo il primo tag figlio, ma tu hai + tag ITEM quindi devi utilizzare getChildren, ciclarti la lista e recuperare il tag DESCR.

    Cmq credo ti stai complicando la vita per risolvere dovrebbe bastare modificare questa riga da cosi:

    codice:
    Iterator itr = doc.getRootElement().getChildren().iterator();
    a cosi:

    codice:
    Iterator itr = doc.getRootElement().getChild().getChildren().iterator();
    e il resto del codice tenerlo come era prima, fai una prova!

  10. #10
    niente!! in qualsiasi punto da te suggerito provo a mettere o sostituire getChild o getChildren non funziona.

    Inoltre se provo a sostituire la stringa Iterator itr ecco l'errore:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method getChild(String) in the type Element is not applicable for the arguments ()

    Grazie ancora

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.