Newsgroup: it.comp.java
Titolo: Parser Xml

Ciao dovrei fare un parser xml,
mi consigliate qualche classe di esempio per capire il funzionamento?
Link?
Grazie

esistono parser scaricabili gratuiti?
oppure bisgona partire da zero?

 wrote in message
news:MeYJ9.29701$t_1.2...@tornado.fastwebnet.it...

Prova a guardare qui:
http://java.sun.com/xml/
Fausto

 ha scritto nel messaggio
news:ata12o$11nj99$1...@ID-121868.news.dfncis.de...


> già guardato ma non ho capito na mazza...
Fare un parser XML senza aver capito come funziona quello fornito con
Java-XML è un po' dura.
Riprova a leggere, è scritto in un inglese abbastanza comprensibile.
Ciao, GiAnt.

 wrote in message
news:100K9.30102$t_1.2...@tornado.fastwebnet.it...


Si avete ragione sono troppo complicati..
Cmq ho provato a scaricare quello dell sun (xerces-2_2_1)ma non ho capito
neache come usarlo.. boh..
Il mio problema č quello di poter leggere da database dei dati e creare un
xml...
Devo poter leggere scrivere e cercare in un documento.. e basta..
quindi vorrei fare qualcosa di semplice.. senza usare migliaia di classi..
Nella guida di java che trattono di xml esistono queste classi:
org.w3c.dom
org.xml.sax
org.xml.sax.ext
org.xml.sax.helpers
javax.xml.parsers
javax.xml.transform
javax.xml.transform.dom
javax.xml.transform.sax
javax.xml.transform.stream
il mio problema č saper quale usare...
non so neanche dove partire..
Grazie

 creare un xml...
Per fare questo non ti serve un parser. XML e' sempicemente un file di 
testo con dei tag dentro, messi in un certo modo. Per sapere qual'e' il 
modo, devi leggerti qualcosa di XML, ma una cosa semplice semplice che puoi 
fare se proprio decidi che capire cosa stai facendo non ti interessa e'
...esegue una select via JDBC, ottiene un ResultSet r...
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.println("<?xml version=\"1.0\"?>");
pw.println("<dati>");
while(r.next()) {
    	pw.println(" <riga1>");
     pw.println("  <colonna1>");
     pw.print("   ");
     pw.println(r.getString(0));
    	pw.println("  </colonna1>");
     ...idem per le altre colonne..
     pw.println(" </riga1>");
}
pw.println("</dati>");   
String xml = sw.toString();
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 ha scritto nel messaggio
news:Xns92E29C5529D6cr...@130.133.1.4...
[cut.. cut]
è quello che ho pensato io fin dall' inizio..
ma mi hanno detto(sto facendo uno stage..)
di guardare i parser...
Ti ringrazio per la risposta...
Volendo posso usare le classi che ho già fatto per scrivereil file e al
posto del .txt ci metto .xml..
e aggiungo i tag per il nome del caMpo del database..
Ora mi viene una domanda cos'è un parser che cosa fa e a che cosa serve?
Grazie..

 fare se proprio decidi che capire cosa stai facendo non ti interessa e'
io voglio sempre capire quello che sto facendo..
ma mi viene sempre più semplice capire guardando e provando un esempio
pratico..
che guardare solamente la teoria o i doc..
mi trovo meglio guardando gli esempi, capendoli , modificandoli.. non so se
mi spiego..
:-)

 Ora mi viene una domanda cos'è un parser che cosa fa e a che cosa serve?
Un parser serve per permettere ad un programma di leggere XML.


 Un parser serve per permettere ad un programma di leggere XML.
cioe mi puoi spiegare meglio per favore?
che programma dovrebbe leggere l' xml?

 wrote in
news:Fi1K9.30222$
t_1.2...@tornado.fastwebnet.it
: 

Hai appena capito come fare un programma A che produce XML, cioe' crea un 
file di testo con tag.
Immagina di dover scrivere un programma B che legge tale file.
Una possibilita' e' aprire il file e cominciare a contare le parentesi 
acute. Questa possibilita' non funziona (se non in alcuni casi in cui 
funziona in modo eclatante, ma non ti voglio far le cose piu' complicate. 
Quindi diciamo che non funziona, o funziona ma terribilmente costosa in 
termini di tempo. :)
Questo equivale pressappoco a scriversi un parser. Per cos'e' un parser in 
generale ti rimando ad una ricerca su google.
Un'altra possibilita' e' riusare un parser gia' scritto da qualcun'altro. 
Ora, una delle belle proprieta' di XML e' che si presta bene a fare questo.
Quindi, per scrivere il tuo programma B la decisione giusta e' usare un 
parser XML fatto da altri. Xerces e' una delle possibilita'.


 parser XML fatto da altri. Xerces e' una delle possibilita'.
ti ringrazio della tua esauriente spiegazione...
Ma mi puoi spiegare come far ad usare Xerces ?
ho scaricato tre file dal sito apache..
src, tools,bin..
poi li ho decompattati..
ora non so più andare avanti..

 Ma mi puoi spiegare come far ad usare Xerces ?
No, perche e' troppo lungo. Devi leggerti la documentazione e provare gli 
esempi. La documentazione probabilmente assume che tu abbia qualche 
concetto generale (ad esempio, cos'e' un parser) e qualche idea su XML.
Poi, se non capisci qualcosa, chiedi. 
Per farti un paragone, e' come se tu stessi chiedendo "mi puoi spiegare 
come usare Java"? Non ha senso.



 ho capito che ti chiedo troppo.. ma non so proprio dove  partire.. è
possibile che non ci sia un file di menu che lanciato quello parta il
programma invece di essere buttato tutto dentro cartelle alla rinfusa..+

 String xml = sw.toString();
Cosě č poco "elegante".
meglio usare le classi ed i metodi che mette a disposizione java:
il goNow crea l'elemento (gli elementi) XML
il salvaDom salva il file XML in base all'elemento creato.
Non ho incluso gli import, ma sono i classici org.... javax.... dom.
Ciao, GiAnt.
NOTA: questo č solo un esempio d'uso (spero sia sufficientemente chiaro).
Occorre fare le modifiche che servono in base a quello che si vuole fare
(lettura DB etc.).
  /**Esecutore del parsing e del relativo loading degli attributi
dell'oggetto*/
  public void goNow(){
    System.out.println("Eseguo il caricamento del documento XML e lo
trasformo in un File");
    String pathOrigineXML="";
    String passoUno="passo uno";
    System.out.println("File da creare="+pathOrigineXML+passoUno);
    //Versione DOM
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try {
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document=builder.newDocument();
      Element root=(Element)document.createElement("Elementoroot");
      document.appendChild(root);
      root.appendChild(document.createTextNode("Nodo di testo"));
      Element elemento1=document.createElement("ElementoIngrandito");
      elemento1.setAttribute("NomeAttributo","Valore Attributo");
      elemento1.setNodeValue("Valore del Nodo");
      root.appendChild(elemento1);
      root.normalize();
      System.out.println("DOM creato");
System.out.println("-----------------------------------------------");
        System.out.println("LocalName "+root.getLocalName());
        System.out.println("NamespaceURI "+root.getNamespaceURI());
        System.out.println("NodeName "+root.getNodeName());
        System.out.println("NodeType "+root.getNodeType());
        System.out.println("Prefix "+root.getPrefix());
        System.out.println("NodeValue "+root.getNodeValue());
        System.out.println(root.toString());
System.out.println("-----------------------------------------------");
      salvaDom(root);
      }
    catch (ParserConfigurationException pce) {
      // Parser with specified options can't be built
      pce.printStackTrace();
      }
    System.out.println("File creato");
    }
    public void salvaDom(Element root){
      try{
        RandomAccessFile fileXML=new
RandomAccessFile(fieldFinalXML.getText(),"rw");
        fileXML.seek(0);
        String stringa=root.toString();
        stringa+="\r\n";
        for (int i=0;i<stringa.length();i++){
          fileXML.write((int)stringa.charAt(i));
          }
        fileXML.close();
        }
      catch (FileNotFoundException ex){System.out.println(ex);}
      catch (IOException ex){System.out.println(ex);}
      }

 ha scritto nel messaggio
news:atc5l4$i5c$1...@lacerta.tiscalinet.it...
[cut..cut]
Ti ringrazio..
ora faccio delle prove..
Finalmente sono riuscito a fare la ricerca di un valore del nodo dentro l'
xml..
Grazie a tutti

       }
ma fieldFinalXML non l' hai dichiarata.. cos'è?
mi da errore ..
In mezzo a tutti sti comandi ci capisco ben poco..
qual'è il comando per scriver un semplice xml
come questo
<studente>Danilo</studente>
<prof>Mario</prof>
Grazie

 <prof>Mario</prof>
Vedi bene il codice che ti ho inviato e rileggi quello che spero tu abbia
letto riguardo Java-XML.
Devi creare 2 elementi (Element)
ed "appenderli" dove ti servono:
io nell'esempio li ho "appesi" alla root.
root.appendChild(elemento1);
Chiaro???
Ciao, GiAnt.

 Cosě č poco "elegante".
Ah. :) A parte gli scherzi, costruire un albero DOM solo per costruire 
un'output XML? E poi lo si butta via? Hai un'idea di quanto costa?  E 
quant'e' lungo il tuo codice? 
Per cose semplici, strumenti semplici. Questa e' la mia idea di eleganza. 
;-)


;-)
Arrivo solo adesso ma ho letto tutto il thread e voglio dare il mio
parere.
Quanto scrivo e' frutto della mia poca esperienza ed e' un parere
personale ed opinabile. :-)
Innanzitutto chiarisco a Spino un paio di concetti base che forse non
ha compreso a fondo.
XML serve per rappresentare in modo standard dei dati che abbiamo.
DOM serve a definire un modello orientato agli oggetti dei dati che
compongono il nostro documento. Di solito si tratta di un albero.
Come si sposano DOM e XML? Entrambe hanno a che fare con dei dati.
Se ho dei dati e li voglio scrivere in formato XML come faccio?
Ho diversi modi. Uno e' quello detto da Sadun e cioe' li scrivo
direttamente sul file inserendoli dentro a dei tag, un altro e' quello
proposto da GiAnt e consiste nel passare attraverso un albero DOM. In
pratica modello i miei dati ad oggetti e li inserisco in un albero DOM
e poi lo "navigo" e scrivo i dati. Cosa conviene fare? Dipende dai
casi. Se non devi fare altro che scrivere i dati su un file io
propendo per quanto scritto da Sadun. Se poi invece con i dati devi
fare altre cose allora forse ti puň far comodo averli sotto forma di
albero DOM. (magari ne devi fare una valutazione)
Ho un file XML e lo voglio leggere recuperando le informazioni in esso
contenute. Come faccio?
Hai due modi (classici). Uno e' con un DOMParser l'altro con un
XMLReader.
La differenza?
Il DOM Parser ti restituisce un albero DOM che contiene i dati mentre
l'XML Reader genera degli eventi durante la lettura del file (o stream
che dir si voglia) ad ogni tag incontrato (e altre quisquilie)
permettendoti di reagire in risposta e fare quello che vuoi con il
dato contenuto nel tag.
Nota sul parser. Il parser nella sua accezione classica e' un
analizzatore sintattico e in quanto tale scandisce il file XML per
capire se rispetta le regole della grammatica generatrice. Come
effetto collaterale ti permette di desumere sufficienti informazioni
per estrapolare e valutare i dati contenuti nel file.
Direi che la mia quota di offtopic per il giorno e' esaurita e quindi
chiudo.
Purtroppo la materia non e' immediata e postare un po' di codice non
e' sufficente, a mio giudizio, a capire come funziona la cosa. Quindi
Spino ti consiglio di trovare qualcuno disposto a spiegarti cosa fare
oppure leggere attentamente tutta la documentazione e gli esempi che
si trovano in rete.
--
Ciao.
Mario Maroncelli
mar...@mclink.it

Ti ringrazio per la tua esauriente spiegazione..
mi sa che opterň per cercare di capire da solo..
qui da me non ci sono persone in grado di spiegarmi...
sono io che ne so piů di loro.. figuriamoci..