Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: [jsp] parse xml

  1. #1
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684

    [jsp] parse xml

    Buongiorno a tutti...

    domanda del venerdì mattina...

    Ho il seguente file xml

    codice:
        <?xml version="1.0" encoding="ISO-8859-1"?>  
        <table id = "table1" >  
            <atr>a</atr>  
            <atr>b</atr>  
            <atr>c</atr>  
            <atr>d</atr>  
            <key>e</key>   
        </table>  
    
        <table id = "table2" >  
            <atr>a</atr>  
            <atr>b</atr>  
            <atr>c</atr>    
        </table>
    Effettuo il parse del file con il seguente codice:

    codice:
                     Element  element = doc.getDocumentElement();   
                     NodeList personNodes = element.getChildNodes();       
                  
                    Node emp = personNodes.item(1); // first node   
                    NodeList Name = emp.getChildNodes();   
          
                    Node nodo1 = Name.item(1);
    E' possibile parsare il file xml basandomi sui nomi dei nodi....mi spiego meglio...

    La pagina jsp riceve un parametro "tableid" e in base a quello dovrei visualizzare tutti gli atributi della tabella...quindi se ad esempio la pagina riceve conme parametro "table2"
    posso ciclare su tutti gli atributi della tabella e avere come risultato a , b , c...

    Grazie mille
    Oppa

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

    Re: [jsp] parse xml

    Originariamente inviato da power83
    codice:
        <?xml version="1.0" encoding="ISO-8859-1"?>  
        <table id = "table1" >  
            <atr>a</atr>  
            <atr>b</atr>  
            <atr>c</atr>  
            <atr>d</atr>  
            <key>e</key>   
        </table>  
    
        <table id = "table2" >  
            <atr>a</atr>  
            <atr>b</atr>  
            <atr>c</atr>    
        </table>
    Tanto per iniziare, questo XML, esattamente così come l'hai postato è errato. La "radice" deve essere 1 sola. Qui io ne vedo 2 (<table>).

    Originariamente inviato da power83
    La pagina jsp riceve un parametro "tableid" e in base a quello dovrei visualizzare tutti gli atributi della tabella...quindi se ad esempio la pagina riceve conme parametro "table2"
    posso ciclare su tutti gli atributi della tabella e avere come risultato a , b , c...
    Si può benissimo fare .... posso spiegartelo. Ma chiarisci prima la questione del XML. C'è realmente una unica "radice" che qui magari non hai postato (es. per brevità)? O è esattamente così come l'hai postato?
    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 L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    Scusami ma di xml non ne so molto...

    Basta aggiungere una root? quindi una cosa del genere..?

    codice:
        <?xml version="1.0" encoding="ISO-8859-1"?>  
    
    <tables>
    
        <table id = "table1" >  
            <atr>a</atr>  
            <atr>b</atr>  
            <atr>c</atr>  
            <atr>d</atr>  
            <key>e</key>   
        </table>  
    
        <table id = "table2" >  
            <atr>a</atr>  
            <atr>b</atr>  
            <atr>c</atr>    
        </table>  
    
    </tables>
    Grazie mille...
    Oppa

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da power83
    Basta aggiungere una root? quindi una cosa del genere..?
    Sì, perfetto. Ora ha 1 sola "radice".

    Ora vediamo cosa devi fare per cercare e prendere i dati di una specifica tabella. Innanzitutto non l'hai precisato ma stai sicuramente usando il DOM a livello W3C (in Java le classi in org.w3c.dom).

    Tu hai un Document, di cui prendi il Element "radice" con getDocumentElement(). Questo Element è il tuo <tables>.
    Tu sai che dentro <tables> hai N <table>, quindi dal Element radice prendi il NodeList dei figli. Per ogni figlio verifichi che: a) il node type sia Node.ELEMENT_NODE e b) il node name sia uguale a "table".
    Se è un <table> allora vai a prendere il valore dell'attributo 'id' con getAttribute(). Se è il id che stai cercando (es. "table2"), allora hai trovato la tua tabella.

    Ora fai una cosa simile a prima, prendi il NodeList dei figli, per ogni figlio verifichi il node type e il node name che deve essere "atr". Se in <atr> hai solo del testo lo prendi con getTextContent().

    Se non ti è chiaro, chiedi pure. E ti può essere utile guardare tra i miei Java Examples, sezione XML.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    ok...ora provo a scrivere il codice..grazie!
    Oppa

  6. #6
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    codice:
     <%
              Element  element = doc.getDocumentElement(); 
              NodeList personNodes = element.getChildNodes();     
              
    		  for (int i=0; i<personNodes.getLength(); i++){
                Node emp = personNodes.item(i);
    			
    			/* ******************** */
    			out.println (personNodes.item(i));
    			out.println ("
    "); 
    			/* ******************** */
    			          
                NodeList NameTable = emp.getChildNodes(); 
    
    				for (int j=0; j<NameTable.getLength(); j++ ){
    					Node node = NameTable.item(j);
    								
    			/* ******************** */
    				out.println(node.getFirstChild().getNodeValue());
    				out.println ("
    ");
    			/* ******************** */
    			
    			}
            }
         %>
    risultato:

    [#text: ]
    [table: null]
    a
    b
    c
    d
    e
    [#text: ]
    [table: null]
    a
    b
    c
    [#text: ]

    mmm...c'è qualche errore...! =)
    Oppa

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da power83
    mmm...c'è qualche errore...! =)
    Come vedi ci sono dei nodi di "testo" in mezzo. Se hai fisicamente un file:

    codice:
    <tables>[newline]
    ...spazi...<table id="table1">
    Il primo figlio di <tables> non è il primo <table> ma è un nodo di "testo" che contiene newline+spazi prima di <table>. Ti è chiaro ora?

    Per questo ho consigliato prima (ed è generalmente buona cosa se non si "sa" o forza/stabilisce a priori il contenuto esatto del xml) di testare: node type e poi node name.
    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 L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    Originariamente inviato da andbin
    Come vedi ci sono dei nodi di "testo" in mezzo. Se hai fisicamente un file:

    codice:
    <tables>[newline]
    ...spazi...<table id="table1">
    Il primo figlio di <tables> non è il primo <table> ma è un nodo di "testo" che contiene newline+spazi prima di <table>. Ti è chiaro ora?

    Per questo ho consigliato prima (ed è generalmente buona cosa se non si "sa" o forza/stabilisce a priori il contenuto esatto del xml) di testare: node type e poi node name.
    chiaro =) ! quindi:

    codice:
       <%
              Element  element = doc.getDocumentElement(); 
              NodeList personNodes = element.getChildNodes();     
              
    		  for (int i=0; i<personNodes.getLength(); i++){
                Node emp = personNodes.item(i);
    			if (isTextNode(emp))
                  continue;
    			/* ******************** */
    			out.println (personNodes.item(i));
    			out.println ("
    "); 
    			/* ******************** */
    			  
                NodeList NameTable = emp.getChildNodes(); 
    
    				for (int j=0; j<NameTable.getLength(); j++ ){
    					Node node = NameTable.item(j);
    						if ( isTextNode(node)) 
    						continue;
    			
    			/* ******************** */
    				out.println(node.getFirstChild().getNodeValue());
    				out.println ("
    ");
    			/* ******************** */
    			
    			}
            }
         %>
    risultato...!

    [table: null]
    a
    b
    c
    d
    e
    [table: null]
    a
    b
    c

    grazie mille...!
    Oppa

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Suggerimento: non "saltare" i nodi di testo ... fai come ho detto, cioè "prendi" gli element che ti interessano.
    E se vuoi farti un metodo apposito che può tornare comodo, puoi fare una cosa del tipo: isTagNode(emp, "table")
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di power83
    Registrato dal
    Oct 2002
    Messaggi
    684
    Originariamente inviato da andbin
    Suggerimento: non "saltare" i nodi di testo ... fai come ho detto, cioè "prendi" gli element che ti interessano.
    E se vuoi farti un metodo apposito che può tornare comodo, puoi fare una cosa del tipo: isTagNode(emp, "table")
    Questa non l'ho capita...in che senso "prendi gli element che ti interessano"...

    grazie mille per la pazienza...
    Oppa

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.