Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    Lettura XML in maniera dinamica

    Ciao ragazzi,
    ho un problema riguardante la lettura dei file XML. Per essere piu chiaro sto cercando di creare un programmino che prendesse in entrara dei File XML e da li elaborare i dati contenuto in esso per poi effettuare le operazioni successive.... Solo che il mio problema è questo come faccio a leggere in maniera dinamica il mio File.xml?

    Per essere piu chiari se lo eseguo in questa maniera mi funziona.

    questo è il mio File.xml d'esempio:

    Codice PHP:
    <?xml version="1.0" encoding="UTF-8"?> 
    <contenire>  
     <libro id="0">     
         <titolo>Titolo del libro</titolo>     
         <autore>Mario Rossi</autore> 
         <autoreX>Mario Giovanni</autoreX> 
    </libro>  
    <autori id="1">     
        <nome>Ciccio</nome>    
        <cognome>ciccio</cognome>  
        </autori> 
    </contenire>
    per quanto riguarda il codice java invece è questo:

    Codice PHP:
           SAXBuilder builder = new SAXBuilder();     
        
    Document doc;     
          
    //Element elm1 = null;     
         
    try { 
    doc builder.build("C:/Documents and Settings/c102344/Desktop/Manu/xml/archivioLibro.xml")
        
    Element root doc.getRootElement();// Ottengo la radice 
            //System.out.println( "il valore del root è:"+root.getValue());
            
    List lista root.getChildren(); 
        
    Object [] oggetto lista.toArray();                 
           
    //for(int x = 0; x <oggetto.length; x++){ -- comentato
        
           
    Element valoreOggetto = (Elementoggetto[0];
           
    String titolo valoreOggetto.getChildText("titolo"); 
           
    String autore valoreOggetto.getChildText("autore");     
           
    System.out.println("il valore del titolo è: "+titolo); 
           
    System.out.println("il valore del autore è: "+autore);
           
           
    Element valoreOggetto1 = (Elementoggetto[1];
           
    String nomeAutore valoreOggetto1.getChildText("nome");     
           
    String cognomeAutore valoreOggetto1.getChildText("cognome"); 
           
    System.out.println("il valore del nome è: "+nomeAutore); 
           
    System.out.println("il valore del cognome è: "+cognomeAutore); 
           
    //elm1 = root.getChild("titolo");  // Ottengo l'elemento 

    Se eseguo questo tipo di codice funziona senza nessun problema, ma il problema sta nel fatto se gli aggiungo un altra voce al mio File.xml oppure le voci (o meglio i nomi dei tag) che richiamo all'interno del getChildText non sono quelli non funziona piu.
    Quindi stavo pensando a una lettura dinamica del File solo che non riesco..

    Qualcuno mi sa dare qualche dritta??? Per favore...

    Grazie in anticipo....

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Lettura XML in maniera dinamica

    Originariamente inviato da manublack
    Se eseguo questo tipo di codice funziona senza nessun problema, ma il problema sta nel fatto se gli aggiungo un altra voce al mio File.xml oppure le voci (o meglio i nomi dei tag) che richiamo all'interno del getChildText non sono quelli non funziona piu.
    Ovvio, se la "conoscenza" della struttura è "cablata" nel codice. Cioè se è il codice che cerca e si aspetta una certa struttura.

    Ma c'è livello e livello di "cablatura". Nel tuo codice è troppo "fissa". Perché ad esempio presupponi che il secondo elemento (indice 1) sia un <autori> .... e chi te lo dice???

    Originariamente inviato da manublack
    Quindi stavo pensando a una lettura dinamica del File solo che non riesco..
    "dinamica" ... in che senso??

    Chiariamo bene. Come ho detto prima, il tuo codice è troppo fisso. Tu però nel Document hai tutte le informazioni, anche nomi dei tag, degli attributi, ecc...

    Quindi quale sarebbe il problema? Fai delle iterazioni e verifichi le proprietà dei nodi. Un Element X ha nome "libro"? Allora fai qualcosa. Ha nome "autori"? Fai altro.

    Poi un certo livello di "cablatura" lo puoi comunque avere. Ad esempio essere tu a "cercare" nodi "titolo" e "autore".
    Se un giorno aggiungi un <editore> dentro <libro> è chiaro che dovresti aggiornare il codice. Se invece vuoi fare un qualcosa di ancora più dinamico, del tipo: vedo che c'è un tag con nome "editore" e cerco all'interno di un oggetto Libro un metodo setEditore() .... beh, si può fare. Ma è ancora un altro livello.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    Ciao

    premesso che mi sono di recente sulla creazione e lettura di File.xml, mi chiedevo se era possibile fare un metodo/i che mi permettesso di effettuare la scansione in maniera dinamica,
    nel senso per essere piu chiaro.....


    Codice PHP:
    <?xml version="1.0" encoding="UTF-8"?> 
    <contenire> 
      
    [B]
    <libro id="0"> 
    <titolo>Titolo del libro</titolo>  
    <autore>Mario Rossi</autore> 
    <autoreX>Mario Giovanni</autoreX>
    </libro>
    [/B] 

    <autori id="1">    
    <nome>Ciccio</nome>     
    <cognome>ciccio</cognome>  
     </autori> 

    </contenire>
    Prendendo sempre come riferimento il mio File.xml volevo fare una cosa del tipo che il mio metodo/i leggessero il blocco LIBRO e prendessero al suo interno tutti i valori dei vari ELEMENT presenti, con un l'ulteriore valorizzazione delle variabili.

    Ovviamente chiedo se è fattibile, essendo non tanto pratico sugli XML chiedo se una gestione di questo genere sia fattibile....

  4. #4
    Puoi usare Digester della apache qui
    Gli setti le proprietà del tuo xml, glielo dai in pasto e ti ritorna una lista di oggetti che gli hai impostato. Per esempio puoi far tornare una lista di oggetti Libro dove al suo interno hai messo gli attributi che vuoi.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Ciao

    Originariamente inviato da manublack
    Prendendo sempre come riferimento il mio File.xml volevo fare una cosa del tipo che il mio metodo/i leggessero il blocco LIBRO e prendessero al suo interno tutti i valori dei vari ELEMENT presenti, con un l'ulteriore valorizzazione delle variabili.
    Sì ma ripeto ... quale è il problema? Ho detto prima che in memoria hai tutta la struttura dati che "modella" il documento XML. Quindi puoi "navigare" avanti/indietro nell'albero dei nodi come ti pare. La questione è un'altra: quale livello di "conoscenza" della struttura vuoi che abbia il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    ciao

    si ho capito che ho a disposizione il File.xml, pero volevo sapere se c'era qualche classe o metodo che gestisse il tuo in maniera meno "clabata" di getChildText nella quale per farmi restituire i valori degli elementi devo fornigli i nomi precisi di essi. Pertanto mi chiedevo cè un modo per farsi di farmi dare i dati senza che io debba per forza fornire i nomi precisi dei miei elementi?? Oppure come mi ha suggerito DonFrignolo basta che utilizzo la classe Digester?


    Grazie ancora a tutti per l'aiuto...

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ciao

    Originariamente inviato da manublack
    Pertanto mi chiedevo cè un modo per farsi di farmi dare i dati senza che io debba per forza fornire i nomi precisi dei miei elementi?? Oppure come mi ha suggerito DonFrignolo basta che utilizzo la classe Digester?
    Ma ancora con questa domanda????

    O vuoi fare una gestione molto generica sfruttando una "mappatura" (più o meno automatica) tra tag xml e classi/proprietà e questo lo fai sfruttando la tecnologia JAXB o con quel Digester (che personalmente non conosco).

    Oppure "qualcosa" il tuo codice deve sapere. Punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    324

    ciao

    perfetto... hai per caso qualche cosa che spiega come funzionano le JAXB per caso??? Ancora grazie e scsua di averti fatto sclerare cosi tanto.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ciao

    Originariamente inviato da manublack
    hai per caso qualche cosa che spiega come funzionano le JAXB per caso???
    Dal link che ho indicato sopra, trovi altre informazioni, sicuramente utili.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.