Newsgroup: it.comp.java
Titolo: veloce e semplice parsing di xml

Ciao. Mi sono occupato di XML con Java ma con prodotti tipo Cocoon o altri
che in un qualche modo wrappano le funzionalita' del linguaggio per
realizzare strumenti ad un livello piu' elevato.
Ora mi servirebbe pero', in una applicazione stand-alone che fa uso di
Java3D (che per inciso sotto linux funziona benissimo, non credevo di
trovare cosi' poca difficolta' ;)).
Senza entrare in dettagli inutili avrei un filettino xml che mi descrive
gli oggetti contenuti in un modo conveniente. Dovrei quindi parsare questi
oggetti dalla struttura piuttosto semplice ed estrarre per ognuno di essi
le coordinate; alche' creo gli oggetti Java3D e sono a posto. Mi chiedevo:
quali classi e metodi sono piu' adatti per itarere un file xml ed estrarne
alcuni valori? Magari con una sintassi tipo xpath o simili. Non ho bisogno
di grandi caratteristiche, tipo modifica dell'albero xml in memoria o
simili ... solo una lettura e relativa estrazione dati in modo semplice.
Grazie per ogni consiglio!
Ciao!
Alessio Sangalli

Per il parsing di un file xml puoi utilizzare il package
org.sax oppure
javax.xml.parsers. In questo caso la classe è SAXParser ma quest'ultima
non l'ho mai utilizzata. Con un'okkiata alle API dovrebbe venirti tutto
semplice
Ciao
Sandro
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 semplice
Guarda, mettendoci mano mi e' venuto in mente che in effetti ci avevo gia'
provato.
Ora, sono riuscito a fare quello che intendevo. In ogni caso, non supporta
xpath ed il tutto e' veramente *difficile* da far funzionare. Credo che
con queste classi xml stiano facendo un'altra "Date" non so se mi intendo
;)
comunque alla fin fine sono riuscito, con molte prove e tentativi a fare
quello che dovevo fare...
Giudicate voi, a me questo codice fa schifo; se per caso dovesse servirvi
fate pure - se me lo migliorate tanto meglio :D
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class LoadXYZ
{
        DocumentBuilderFactory factory;
        DocumentBuilder builder;
        FileInputStream file;
        Document doc;
        Element root;
        NodeList nodeList;
        public LoadXYZ()
        {
        }
        public void load(String fileName)
        {
                try
                {
                        factory = DocumentBuilderFactory.newInstance();
                        builder = factory.newDocumentBuilder();
                        file = new FileInputStream(fileName);
                        doc = builder.parse(file);
                        root = doc.getDocumentElement();
                        nodeList = root.getElementsByTagName("item");
                        System.out.println("Lunghezza: " + nodeList.getLength());
                        for(int i=0 ; i<nodeList.getLength(); i++)
                        {
                                String itemType = nodeList.item(i).getAttributes().getNamedItem("type").getNodeValue();
                                if(itemType.equals("building"))
                                {
                                        System.out.println("Name: " + nodeList.item(i).getAttributes().getNamedItem("na
me").getNodeValue());
                                        System.out.println("Altitude: " + nodeList.item(i).getAttributes().getNamedItem
("altitude").getNodeValue());
                                        System.out.println("Texture: " + nodeList.item(i).getAttributes().getNamedItem(
"texture").getNodeValue());
                                        NodeList children = nodeList.item(i).getChildNodes();
                                        for(int j=0; j<children.getLength(); j++)
                                        {
                                                if(children.item(j).getNodeType()==Node.ELEMENT_NODE)
                                                {
                                                        System.out.println("Lat: " + children.item(j).getAttributes().g
etNamedItem("lat").getNodeValue() + "; Long: " + children.item(j).getAttributes().getNamedItem("long").getNodeValue());
                                                }
                                        }
                                }
                                else if(itemType.equals("grass"))
                                {
                                }
                        }
                }
                catch(Exception e) { System.out.println("ERROR = " + e.toString()); }
        }
}
riporto anche il file xml su cui si basa...
<world name="test">
        <item type="building" name="Nord" altitude="15" texture="nord.jpg">
                <coord lat="0" long="-50"/>
                <coord lat="20" long="-50"/>
                <coord lat="20" long="-30"/>
                <coord lat="0" long="-30"/>
        </item>
        <item type="building" name="Centro" altitude="10" texture="centro.jpg">
                <coord lat="0" long="-10"/>
                <coord lat="10" long="-10"/>
                <coord lat="10" long="10"/>
                <coord lat="0" long="10"/>
        </item>
        <item type="building" name="Sud" altitude="25" texture="sud.jpg">
                <coord lat="0" long="60"/>
                <coord lat="30" long="60"/>
                <coord lat="30" long="25"/>
                <coord lat="0" long="25"/>
        </item>
        <item type="grass">
                <coord lat="15" long="-10"/>
                <coord lat="35" long="-10"/>
                <coord lat="35" long="10"/>
                <coord lat="15" long="10"/>
        </item>
</world>

 fate pure - se me lo migliorate tanto meglio :D
+/- la penso come te sulla usabilità di queste classi....
Io ho utilizzato JAXB che genera l'XML e le classi relative in Java 
e i metodi per valorizzarle....
Cmq l'ho utilizzata un paio di volte  abbastanza facilmente 
e ti leva questi problemi...
Ciao
--gio 
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 e ti leva questi problemi...
Scusa, si tratta del pacchetto webservices da installare a parte?
ciao
as

 as
Una volta veniva dato come pacchetto a parte da installare(un annetto
fa),
ma ora credo che tu debba scarciarti tutto il pacchetto 
dei webservices in cui c'è compreso JAXB.
ciao
