|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
[Java] metodo più efficiente per leggere un file xml
Ciao a tutti, come da oggetto, qual è il modo più efficiente in termini di risorse e tempo di esecuzione per leggere un file xml? Ho visto che si può fare sia con DOM che con SAX. Qualcuno mi da qualche consiglio?
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Detto a braccia, con DOM il documento xml deve essere letto e analizzato tutto affinchè si possa costruire il DOM (modello a oggetti del documento). Con SAX invece puoi chiedere al parser che sta leggendo il file di notificarti solo quando incontra la roba che a te interessa. Tipo il meccanismo degli eventi-listener.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Ok, io stavo dando un'occhiata a SAX perchè leggo ovunque che è più efficiente e io potrei dover leggere xml mooolto grossi. Però non capisco se riesco a farci quello che voglio.
Codice:
public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
if(qName.equalsIgnoreCase("sms"))
s = new Sms();
}
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equalsIgnoreCase("sms")) {
smsBulk.add(s);
if(smsBulk.size() == n)
; // save bulk on db
}
}
Ultima modifica di ndakota : 03-10-2011 alle 10:29. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
I valori dei campi da dove arrivano? Se sono attributi che fanno parte di un elemento sms saranno forse contenuti nel parametro *attributes* in ingresso al metodo 'startElement'?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Grazie, sono riusciuto a tirarli fuori
Edit: D'oh! Tiro fuori attributi e valori ma ancora non riesco a tirar fuori i contenuti dei tag tipo <id>5</id> tirare fuori questo 5. Ho il leggero sospetto che serva il metodo characters() però poi come faccio a sapere dentro quale tag sono? Ultima modifica di ndakota : 03-10-2011 alle 11:10. |
|
|
|
|
|
#6 | |
|
Bannato
Iscritto dal: Apr 2006
Messaggi: 5857
|
Quote:
Oppure si può fare il Binding con classi Java ed ottenere oggetti Java da XML o XML da oggetti Java. Io ho a volte utilizzato questa tecnica tramite l'uso della libreria XStream (che non sarebbe nata per quello scopo ma che volendo lo fa) ma probabilm. un candidato migliore sarebbe qualcosa che implementi JAXB PS Ci sono anche JDOM e XOM, simili a DOM come concezione ma molto più Java Oriented e quindi più semplici da usare. Ultima modifica di FabryHw : 05-10-2011 alle 17:29. |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Quote:
Per esempio (ho preso il primo DefaultHandler trovato in giro ):Codice:
public class SaxHandler extends DefaultHandler {
id tagType = 0;
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (qName.equals("id"))
tagType = 1;
else if (qName.equals("bla")
tagType = 2;
else
// ecc;
}
public void characters(char ch[], int start, int length) throws SAXException {
switch (tagType): {
case 1: System.out.println("ID:" + new String(ch, start, length));
case 2: // ecc
}
}
}
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:11.












):








