Oppure

Loading
22/12/10 11:04
Bonny
Salve ragazzi ho implementato una classe per leggere un file xml in questo modo:
package myxml;

import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class Loadxml extends DefaultHandler {

    static public String file = "prova.xml";
    static public String nodo;

    public static void main(String args[]) {
        
        DefaultHandler handler = new Loadxml();
        SAXParserFactory factory = SAXParserFactory.newInstance();//nuova istanza di un SAXParserFactory .
        try {
            out = new OutputStreamWriter(System.out, "UTF8");
            // Crea una nuova istanza di un SAXParser utilizzando i parametri di fabbrica attualmente configurato.
            SAXParser saxParser = factory.newSAXParser();
            //Analizzare il contenuto del file specificato come XML utilizzando l'specificato DefaultHandler .
            saxParser.parse(file, handler);
        } catch (Throwable t) {
            System.err.println();
        }
    }
    static private Writer out;
//Ricevere la notifica di inizio di un elemento.
    @Override
    public void startElement(String namespaceURI, String lName, String qName, Attributes attrs) throws SAXException {
        String name = lName;
        if ("".equals(name)) {
            nodo = qName;
        }
    }
//Data di notifica della fine di un elemento.
    @Override
    public void endElement(String namespaceURI, String sName, String qName) throws SAXException {
        String name = sName;
        if ("".equals(name)) {
            nodo = qName;
        }
    }
//Ricevere la notifica di dati di tipo carattere all'interno di un elemento.
    @Override
    public void characters(char buf[], int offset, int len) throws SAXException {
        String s = new String(buf, offset, len);
        if (s.length() > 1) {
            if (nodo.equals("autore")) {
                System.out.println(nodo + "-> " + s);
            }
            if (nodo.equals("titolo")) {
                System.out.println(nodo + "-> " + s);
            }
            if (nodo.equals("costo")) {
                System.out.println(nodo + "-> " + s);
            }
        }
    }
}

questo è il file xml:
<?xml version="1.0"?>
  <libri>
        <libro>
           <autore>pippo</autore>
           <titolo>primo titolo</titolo>
           <costo>11</costo>
        </libro>
          <libro>
            <autore>sandro</autore>
            <titolo>secondo titolo</titolo>
            <costo>34</costo>
          </libro>
  </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?
aaa
22/12/10 16:01
non nota i tag di chiusura, quindi se hai <autore>...</autore> te lo leggerà due volte!

Nell'istruzione

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


prova con

 if(!nodo.equals("/autore"))
  if(nodo.equals("autore")){
       ..
    }


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 22/12/10 16:05
22/12/10 16:19
HeDo

ma perchè tutti ci trovano gusto nel reinventare la ruota...
aaa
22/12/10 16:33
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:
23/12/10 8:59
Bonny
Postato originariamente da carlduke:

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

Nell'istruzione

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


prova con

 if(!nodo.equals("/autore"))
  if(nodo.equals("autore")){
       ..
    }


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 23/12/10 9:00
aaa