Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [java servlet] jdom

  1. #1

    [java servlet] jdom

    Salve a tutti!!
    Ho un piccolo problemino con jdom, in particolare con il parser..

    Allora, il mio problema è:
    ho un file xml da leggere
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="relaz.xsl"?>
    <relazioni>
    <relazione>
    <autore>dave83</autore>
    <titolo>DAVE</titolo>
    <data>22-1-2005--11.25.13</data>
    <testo>qui puoi scrivere al tua relazione</testo>
    <revisore>nessun revisore</revisore>
    </relazione>
    <relazione>
    <autore>dave83</autore>
    <titolo>xfsfsfsfs</titolo>
    <data>22-1-2005--11.31.49</data>
    <testo>qui puoi scrivere al tua relazione</testo>
    <revisore>nessun revisore</revisore>
    </relazione>
    </relazioni>
    da cui vorrei "tirar fuori", con un form html in cui scrivere il titolo, appunto la stringa scritta nel form.
    Per esempio: nel form scrivo "DAVE", e vorrei che mi stampasse a video tutte le relazioni con titolo "DAVE"!!!
    questa è la mia servlet:
    codice:
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import org.jdom.*;
    import org.jdom.input.*;
    import java.util.*;
    import org.jdom.output.*;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;
    import org.jdom.output.XMLOutputter;
    import org.jdom.Comment;
    import org.jdom.Document; 
    
    
    public class RicercaTitolo extends HttpServlet
    {
    
        public void service(HttpServletRequest req,
                        HttpServletResponse res)
        throws ServletException, java.io.IOException
        {
        	res.setContentType("text/html");
        	PrintWriter out = res.getWriter();
        	int n=0;
        	int l=0;
        	String titolo=req.getParameter("titolo");
        	String dbUrl = "jdbc:odbc:upload";
        	String query="SELECT * FROM upload WHERE file ='"+titolo+"'";
        	int i=0;
      		String risultato=null;
    		String risultato1=null;
    		String risultato2=null;
    		String risultato3=null;
    		String risultato4=null;
    		String risultato5=null;
    		
    		try{	SAXBuilder builder = new SAXBuilder();
    				Document doc = builder.build("C:\\jakarta-tomcat-3.3.2\\webapps\\prova2\\articoli\\relazioni.xml");
    
    				Element root = doc.getRootElement().getChild("relazione");
    				risultato = root.getChild("titolo").getText();
    				risultato2 = root.getChild("autore").getText();
    				risultato3 = root.getChild("data").getText();
    				risultato4 = root.getChild("testo").getText();
    				risultato5 = root.getChild("revisore").getText();
    					if(risultato.equals(titolo)) {
    						i++;
    						out.println("<html>");
    						out.println("<body>");
    						out.println("<center><H1>La tua ricerca ha portato a "+i+" risultati:</H1>");
    						out.println("[*]"+risultato+"");
    						out.println("
    
    "+risultato2+"</p>");
    						out.println("
    
    "+risultato3+"</p>");
    						out.println("
    
    "+risultato4+"</p>");
    						out.println("
    
    "+risultato5+"</p>");
    						out.println("</body>");
    						out.println("</html>");	
    							
    				
    			
    				}		
    	
    	}catch (Exception e){
    						out.println("Errore7!!!!!!!");
    						out.println(e.toString());}		
    	}}
    il problema è che la servlet legge SOLAMENTE il primo livello del file xml...
    Cioè se srcivo nel form "xfsfsfsfs"..
    codice:
    ...<relazione>
    <autore>dave83</autore>
    <titolo>xfsfsfsfs</titolo>....
    dovrebbe stamparmi tutti i dati ma...non è così!!!!!Legge solo il primo tag <relazione>!!!!!
    Qualcuno sa aiutarmi????
    Grazie a tutti!!!!!!!!!!!!!!!!!!!!!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Devi crearti un Iterator per tutto il corpo del documento XML che contiene i tag che ti interessano, quindi seguirlo:
    codice:
    Iterator i = root.getChildern().iterator()
    
    while (i.hasMoreElements()) {
       Element el = i.nect();
       if (el.getChildern("autore").getText().equals("DAVE")) {
          ...  // Fai quello che devi fare...
       }
    }
    In questo modo scorre tutti i figli di "root" e si prende solo quelli che vuoi tu.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille lele!!!!!!!!!!!
    Avevo letto questo iterator in giro ma non lo conoscevo bene e non ho provato ad usarlo!!!!!!!!
    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.