22/12/10 11:04
Bonny
Salve ragazzi ho implementato una classe per leggere un file xml in questo modo:
questo è il file xml:
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?
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