Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Salvare dati ottenuti da un parser.

    Salve! Volevo sapere qual è il miglior modo di organizzare il codice per svolgere queste operazioni.

    Pressione tasto che scatena un evento --> parsing di un file xml --> elaborazione del risultato.

    Ho necessità però di salvare da qualche parte i dati ottenuti dal parsing. In particolare si tratta di una
    lista. E' corretto creare una classe non so, Risultato, che contiene la lista con vari metodi get e set, e
    creare un'istanza di questa classe nel main e passarla nel costruttore della classe che ne fa il
    parsing? Nel parser farò varie Risultato.add(...), dove add dentro Risultato sarà così:

    codice:
    private Lista lista;
    .
    .
    .
    public void add(Dato d) {
             lista.add(d);
        }
    Inoltre vorrei dire che la lista ottenuta non verrà più modificata durante l'applicazione. Dovrei però inserire dei metodi di utilità dentro Risultato per fare vari calcoli sulla lista.
    Faccio questo discorso perché vorrei diminuire il più possibile la dipendenza tra le classi, e come ho detto io la classe Main dipende sia da Risultato che da Parser.
    Ultima modifica di Javino89; 11-12-2013 a 20:15

  2. #2
    Posto questa soluzione provvisoria che sicuramente può essere migliorata. Ringrazio ancora Andbin perché il parser l'ho scritto grazie ai suoi consigli in un precedente post.

    Main

    codice:
    package example;
    
    
    public class Main {
        
        public static void main(String[] args) {        
            Path path = new Path();
            Parser p = new Parser(path);
            p.parsing();
        }
    }
    Position

    codice:
    package example;
    
    
    public class Position {
        
        private double latitudine;
        private double longitudine;
        private double altitudine;
        
        public Position(double lat, double lon, double alt) {
            latitudine = lat;
        longitudine = lon;
            altitudine = alt;
        }
    
    
        public void setLatitudine(double lat) {
            latitudine = lat;
        }
        
        public void setLongitudine(double lon) {
            longitudine = lon;
        }
        
        public void setAltitudine(double alt) {
                altitudine = alt;
        }
        
        public double getLongitudine() {
            return longitudine;
        }
        
        public double getLatitudine() {
            return latitudine;  
        }
                
        public double getAltitudine() {
            return altitudine;
        }
        
        public String toString() {
            String str = "Lat = " + latitudine + " " + "Lon = " + longitudine + " " + "Alt = " + altitudine;
            return str;
        }
    }
    Path

    codice:
    package example;
    
    
    import java.util.ArrayList;
    
    
    public class Path {
            
        private ArrayList<Position> path;
        
        public Path() {
        
            path = new ArrayList<>();
        }
        
        public ArrayList<Position> getPath() {
            return path;
        }
        
        public void add(Position p) {
            path.add(p);
        }
        
        public void get(int index) {
            path.get(index);
        }
    }
    Parser

    codice:
    package example;
    
    
    import java.io.IOException;
    import javax.swing.text.Document;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.xpath.XPath;
    import javax.xml.xpath.XPathConstants;
    import javax.xml.xpath.XPathExpressionException;
    import javax.xml.xpath.XPathFactory;
    import org.w3c.dom.DOMException;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    
    public class Parser {
        
        private Path path;
        
        public Parser(Path p) {
            path = p;
        }
        
        public void parsing() {
            
            try {
                
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setNamespaceAware(true);
                DocumentBuilder builder = dbf.newDocumentBuilder();
                
                Document document = (Document) builder.parse("prova.gpx");
                
                XPathFactory xpf = XPathFactory.newInstance();
                XPath xpath = xpf.newXPath();
                xpath.setNamespaceContext(new GpxNamespaceContext());
                
                Object result = xpath.evaluate("/gpx:gpx/gpx:trk/gpx:trkseg/gpx:trkpt", document,
                        XPathConstants.NODESET);
                
                NodeList list = (NodeList) result;
                
                for (int i = 0; i < list.getLength(); i++) {
                    Node node = list.item(i);
                    NamedNodeMap nnm = node.getAttributes();
                    Node latitudine = nnm.getNamedItem("lat");
                    Node longitudine = nnm.getNamedItem("lon");
                    Object altitudine = xpath.evaluate("gpx:ele/text()", node,
                            XPathConstants.STRING);
                    double lat = Double.parseDouble(latitudine.getNodeValue());
                    double lon = Double.parseDouble(longitudine.getNodeValue());
                    double alt = Double.parseDouble(altitudine.toString());
                    path.add(new Position(lat,lon,alt));
                }
            }
            
            catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException | DOMException | NumberFormatException e) {
                System.err.println(e);
            }
        }
    }

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.