Spiegazione e commento codice HELP

di il
3 risposte

Spiegazione e commento codice HELP

Ciao a tutti ragazzi

Avrei bisogno di una mano per capire, riga per riga, come commentare (e capire meglio) i pezzi di codice dove c'è scritto HELP
Potreste darmi una manina?

il codice è il seguente


/**
 * utilizzato per leggere il file dei libri che si trovano nel file xml
 * */
	public static void leggiLibri(){
		libri = new ArrayList<ProdottoLibro>();  //creo un arraylist libri di tipo ProdottoLibro
		ProdottoLibro.maxId=1;			   // setto id =1
		try {
			SAXBuilder build = new SAXBuilder();		//creo un oggetto della classe saxbuilder che mi serve per prendere l'xml e caricarlo in memoria
			File xml = new File("XML/file_libri.xml");  //specifico il file xml da leggere
			Document doc = build.build(xml);    		//creo un documento doc col metodo build di saxbuilder e gli passo il file xml
														
			/*
			Questo oggetto fornisce il metodo build 
			il quale si occupa di effettuare il parsing del file XML passatogli
			 in argomento, e di salvarlo in un oggetto Document fornito sempre dalle librerie JDOM.
			*/
			
			Element root = doc.getRootElement();		//Creo un Element root che sarà la radice del doc???? HELP
			List list = root.getChildren("prodottolibro");  	//creo una Lista list che........... HELP
			
			Iterator it = list.iterator();				//Creo un iterator per scorrere (COSA STO SCORRENDO IN QUESTO MOMENTO? ) HELP
	
			while (it.hasNext()) {
				ProdottoLibro.maxId++;				//incremento id   (Stessa domanda, di cosa di preciso? del file xml?)
				Element element = (Element) it.next();	
												//Prendo ciò che si trova all'interno della "busta"  
				Element idE = (Element) element.getChild("id");
				String id = idE.getTextTrim();                   
				
				Element titoloE = (Element) element.getChild("titolo");          HELP HELP (potete spiegarmi il procedimento esatto per filo e per segno di queste due righe?
				String titolo = titoloE.getTextTrim();
				
				Element autoreE = (Element) element.getChild("autore");
				String autore = autoreE.getTextTrim();
				
				Element casaEditriceE = (Element) element.getChild("casaeditrice");
				String casaEditrice = casaEditriceE.getTextTrim();

				Element annoE = (Element) element.getChild("anno");
				String anno = annoE.getTextTrim();

				Element numeropagineE = (Element) element.getChild("numeropagine");
				String numeroPagine = numeropagineE.getTextTrim();
	
				Element disponibileE = (Element) element.getChild("disponibile");
				String disponibile= disponibileE.getTextTrim();
				
				Element commentoE = (Element) element.getChild("commento");
				String commento = commentoE.getTextTrim();

				ProdottoLibro lib = new ProdottoLibro(id, titolo, autore, casaEditrice, anno, numeroPagine, disponibile, commento);
				libri.add(lib); //ALLA FINE  LO AGGIUNGE ALL'ARRAYLIST DEI LIBRI
			}
Poi un'altra domanda, perchè crea un arraylist, una lista, un Element e un Document che sono dipendenti tra loro?

3 Risposte

  • Re: Spiegazione e commento codice HELP

    cicciozza ha scritto:


    			SAXBuilder build = new SAXBuilder();		//creo un oggetto della classe saxbuilder che mi serve per prendere l'xml e caricarlo in memoria
    			File xml = new File("XML/file_libri.xml");  //specifico il file xml da leggere
    			Document doc = build.build(xml);    		//creo un documento doc col metodo build di saxbuilder e gli passo il file xml
    
    Deduco che stai usando la libreria JDOM che è esterna al framework standard ed offre la sua API per il parsing/creazione di XML.
    Concettualmente la API è similare alla API del DOM W3C del framework ma è fatta diversamente. La API DOM del framework standard è basata sulle interfacce (Document, Node, Element, ecc... sono interfacce) mentre in JDOM i vari Document, Element, ecc... sono classi.

    Inoltre in JDOM una lista di nodi figli è una "live" list, ovvero puoi modificarla aggiungendo/togliendo elementi e il documento risulta aggiornato in memoria senza fare altro. Nel DOM W3C le cose vanno diversamente.

    cicciozza ha scritto:


    Element root = doc.getRootElement(); //Creo un Element root che sarà la radice del doc???? HELP
    Ogni XML ha un (1 !) tag "radice" <qualcosa> che racchiude tutto. L'oggetto Document NON è l'elemento radice. Il Document è da vedere appena un livello più in altro. Ovvero l'elemento radice + altre informazioni.
    Ecco perché dal Document si deve ottenere il Element del tag radice.

    cicciozza ha scritto:


    List list = root.getChildren("prodottolibro"); //creo una Lista list che........... HELP
    da un Element, getChildren dà la lista dei figli diretti (quelli appena sotto) che si chiamano in un certo modo es. i <prodottolibro>

    cicciozza ha scritto:


    Iterator it = list.iterator(); //Creo un iterator per scorrere (COSA STO SCORRENDO IN QUESTO MOMENTO? ) HELP
    Stai scorrendo i tag <prodottolibro> che sono sotto il tag radice.

    cicciozza ha scritto:


    Element titoloE = (Element) element.getChild("titolo"); HELP HELP (potete spiegarmi il procedimento esatto per filo e per segno di queste due righe?
    String titolo = titoloE.getTextTrim();
    getChild ti dà il PRIMO elemento figlio diretto con quel nome <titolo>. Il Element può contenere del testo, se non vuoto e getTextTrim() ti dà il testo "trimmato" ovvero con i whitespace iniziali/finali eliminati.


    P.S. quando devi comprendere una API come quella di JDOM, il consiglio è ovviamente quello di leggere la documentazione javadoc ufficiale.
  • Re: Spiegazione e commento codice HELP

    Ok andbin, grazie mille della pazienza.
    Provo a rileggere, mettere a posto e commentare intanto
  • Re: Spiegazione e commento codice HELP

    Ciao Andbin, potresti dirmi allora se a grandi linee questa procedura è corretta?

    1 creo saxbuilder per caricare xml in memoria
    2 specifico il file xml
    3 creo document doc col metodo build (da qui devo ottenere l'elemento radice)
    4 creo element root =doc.getRootElement() che contiene l'elemento radice + altre informazioni
    5 dall'element, List list ci restituisce la lista dei figli diretti che stanno subito sotto
    6 Con Iterator it scorro i tag di <prodottolibro> che sono sotto il tag radice

    NEL WHILE

    1 incremento max id che è il primo tag di <prodottolibro>
    2 Element element = (Element) it.next(); QUESTA CHE VUOL DIRE LETTERALMENTE?

    3 Prendo i vari tag, li metto come testo Trimmato in una stinga perchè element può contenere solo testo GIUSTO?
    4 poi alla fine metto tutte le stringhe come argomenti dell'arraylist libri

    Se così fosse mi hai tolto veramente un triliardo di dubbi.
    E ti ringrazio ancora chiaramente
Devi accedere o registrarti per scrivere nel forum
3 risposte