Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - java e XML
Forum - Java - java e XML

Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 12:04
Mercoledì, 22/12/2010
Salve ragazzi ho implementato una classe per leggere un file xml in questo modo:
Codice sorgente - presumibilmente Java

  1. package myxml;
  2.  
  3. import java.io.*;
  4. import org.xml.sax.*;
  5. import org.xml.sax.helpers.*;
  6. import javax.xml.parsers.*;
  7.  
  8. public class Loadxml extends DefaultHandler {
  9.  
  10.     static public String file = "prova.xml";
  11.     static public String nodo;
  12.  
  13.     public static void main(String args[]) {
  14.        
  15.         DefaultHandler handler = new Loadxml();
  16.         SAXParserFactory factory = SAXParserFactory.newInstance();//nuova istanza di un SAXParserFactory .
  17.         try {
  18.             out = new OutputStreamWriter(System.out, "UTF8");
  19.             // Crea una nuova istanza di un SAXParser utilizzando i parametri di fabbrica attualmente configurato.
  20.             SAXParser saxParser = factory.newSAXParser();
  21.             //Analizzare il contenuto del file specificato come XML utilizzando l'specificato DefaultHandler .
  22.             saxParser.parse(file, handler);
  23.         } catch (Throwable t) {
  24.             System.err.println();
  25.         }
  26.     }
  27.     static private Writer out;
  28. //Ricevere la notifica di inizio di un elemento.
  29.     @Override
  30.     public void startElement(String namespaceURI, String lName, String qName, Attributes attrs) throws SAXException {
  31.         String name = lName;
  32.         if ("".equals(name)) {
  33.             nodo = qName;
  34.         }
  35.     }
  36. //Data di notifica della fine di un elemento.
  37.     @Override
  38.     public void endElement(String namespaceURI, String sName, String qName) throws SAXException {
  39.         String name = sName;
  40.         if ("".equals(name)) {
  41.             nodo = qName;
  42.         }
  43.     }
  44. //Ricevere la notifica di dati di tipo carattere all'interno di un elemento.
  45.     @Override
  46.     public void characters(char buf[], int offset, int len) throws SAXException {
  47.         String s = new String(buf, offset, len);
  48.         if (s.length() > 1) {
  49.             if (nodo.equals("autore")) {
  50.                 System.out.println(nodo + "-> " + s);
  51.             }
  52.             if (nodo.equals("titolo")) {
  53.                 System.out.println(nodo + "-> " + s);
  54.             }
  55.             if (nodo.equals("costo")) {
  56.                 System.out.println(nodo + "-> " + s);
  57.             }
  58.         }
  59.     }
  60. }


questo è il file xml:
Codice sorgente - presumibilmente Plain Text

  1. <?xml version="1.0"?>
  2.   <libri>
  3.         <libro>
  4.            <autore>pippo</autore>
  5.            <titolo>primo titolo</titolo>
  6.            <costo>11</costo>
  7.         </libro>
  8.           <libro>
  9.             <autore>sandro</autore>
  10.             <titolo>secondo titolo</titolo>
  11.             <costo>34</costo>
  12.           </libro>
  13.   </libri>



Non capisco perchè nell'output mi scrive due volte autore, titolo e costo:
autore-> pippo
autore->
          
titolo-> primo titolo
titolo->
          
costo-> 11
costo->
        
autore-> sandro
autore->
            
titolo-> secondo titolo
titolo->
            
costo-> 34
costo->

Secondo voi dove sbaglio?
Questa tecnica è quella giusta per interagire con xml?

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 17:01
Mercoledì, 22/12/2010
non nota i tag di chiusura, quindi se hai <autore>...</autore> te lo leggerà due volte!

Nell'istruzione

Codice sorgente - presumibilmente Plain Text

  1. if(nodo.equals("autore")){..}



prova con

Codice sorgente - presumibilmente Plain Text

  1. if(!nodo.equals("/autore"))
  2.   if(nodo.equals("autore")){
  3.        ..
  4.     }



ovviamente per tutti i tag che devi cercare

EDIT : non l'ho provato, ma credo che il problema sia quello :k:

Ultima modifica effettuata da il 22/12/2010 alle 17:05
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 17:19
Mercoledì, 22/12/2010

ma perchè tutti ci trovano gusto nel reinventare la ruota...

PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
0
Down
V
Segnala al moderatore
Postato alle 17:33
Mercoledì, 22/12/2010
Testo quotato

Postato originariamente da HeDo:


ma perchè tutti ci trovano gusto nel reinventare la ruota...



:rofl:

beh tu non l'hai mai fatto?? è piuttosto divertente :rotfl: :rotfl:

semplicemente no :) - HeDo - 23/12/10 03:44
PM
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 9:59
Giovedì, 23/12/2010
Testo quotato

Postato originariamente da carlduke:

non nota i tag di chiusura, quindi se hai <autore>...</autore> te lo leggerà due volte!

Nell'istruzione

Codice sorgente - presumibilmente Plain Text

  1. if(nodo.equals("autore")){..}



prova con

Codice sorgente - presumibilmente Plain Text

  1. if(!nodo.equals("/autore"))
  2.   if(nodo.equals("autore")){
  3.        ..
  4.     }



ovviamente per tutti i tag che devi cercare

EDIT : non l'ho provato, ma credo che il problema sia quello :k:


Non funziona ma grazie cmq:)
Io mi chiedo: ma non c'è un modo più semplice ed intuitivo per interagire con i file xml?
Non so voi ma ogni volta che affronto un nuovo argomento con java(ora per esempio lavorare con xml) faccio una fatica assurda per capire come funziona, cioè che classi usare ecc .. mi piace tantissimo ma ste cose mi demoralizzano un sacco.

Ultima modifica effettuata da Bonny il 23/12/2010 alle 10:00
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
-1
Down
V
Segnala al moderatore
Postato alle 10:48
Giovedì, 23/12/2010

PM